首页 文章

AltBeacon范围永远不会返回超过1个信标

提问于
浏览
1

我正在使用AltBeacon库(2.5.1)来检测信标 . 我设置了一个“通用”区域,以便能够检测范围内的任何信标,然后用它做我的东西 . 问题是,当我在范围内有几个信标时,didRangeBeaconsInRegion回调总是为我提供一次只有一个信标的集合,这个信标是所有现有信标中的一个随机...为什么我不能得到所有的信标我的收藏中的信标范围?

所有这些都是在一个服务中完成的,我确实清理了所有其他的东西,只保留下面代码的相关部分 - >希望我在这里做错了什么?

public class MonitorService extends Service implements BeaconConsumer 
{

    private BeaconManager beaconManager;


    @Override
    public void onCreate() 
    {
        super.onCreate();


        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

        beaconManager.setForegroundScanPeriod(5000l);
        beaconManager.setBackgroundScanPeriod(5000l);
        beaconManager.setForegroundBetweenScanPeriod(1100l);
        beaconManager.setBackgroundBetweenScanPeriod(1100l);


        setupBeaconManager();
    }


    private void setupBeaconManager()
    {
        if (!beaconManager.isBound(this))
            beaconManager.bind(this);
    }

    private void unsetBeaconManager()
    {
        if (beaconManager.isBound(this))
        {
            beaconManager.unbind(this);

            try 
            {
                beaconManager.stopRangingBeaconsInRegion(new Region("apr", null, null, null));
            } 
            catch (RemoteException e) 
            {  
                Log.i(TAG, "RemoteException = "+e.toString());
            }
        }
    }


    @Override
    public void onBeaconServiceConnect() 
    {
        beaconManager.setRangeNotifier(new RangeNotifier() {
            @Override 
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) 
            {
                Log.i(TAG,"didRangeBeaconsInRegion, number of beacons detected = "+beacons.size());
                // HERE IT IS : the size is Always 1, but the beacon (UUID etc. can be different)
            }
        });


        try 
        {
            beaconManager.startRangingBeaconsInRegion(new Region("apr", null, null, null));
        } 
        catch (RemoteException e) 
        {  
            Log.i(TAG, "RemoteException = "+e.toString());
        }


    }

    @Override
    public void onDestroy() 
    {
        unsetBeaconManager();

        super.onDestroy();
    }


}

我正在使用Nexus 6在Android 5.1.1上工作(但Wiko廉价手机也能提供相同的结果) . 信标设置为每隔600毫秒做一次广告...但即使用100毫秒它也会给出完全相同的结果......

1 回答

  • 2

    代码看起来不错 . 几点想法:

    • 尝试使用基于相同库(如Locate)的现成信标扫描仪应用程序 . 它是否同时检测到所有信标?如果不是,信标或其配置可能有问题 .

    • 您的每个信标都有唯一标识符吗?默认情况下,库只检测多个信标(如果它们具有唯一标识符) .

相关问题