在Android上使用AltBeacon Library检测iBeacon

时间:2017-09-16 18:18:31

标签: android ibeacon beacon android-ibeacon

我正在使用AltBeacon库来检测iBeacon设备。这是我使用的代码,基于AltBeacon的文档,但未检测到信标:

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.bind(this);
beaconManager.addMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(Region region) {
            Log.i("test", "I just saw an beacon for the first time!");
        }

        @Override
        public void didExitRegion(Region region) {
            Log.i("test", "I no longer see an beacon");
        }

        @Override
        public void didDetermineStateForRegion(int state, Region region) {
            Log.i("test", "I have just switched from seeing/not seeing beacons: "+state);
        }
    });

try {
   beaconManager.startMonitoringBeaconsInRegion(new Region("e2c56db5-dffb-48d2-b060-d0f5a71096e0", null, null, null));
 } catch (RemoteException e) {    }

这段代码错了吗?

1 个答案:

答案 0 :(得分:1)

两个问题:

问题1:

当您致电beaconManager.bind(this);时,封闭类必须是BeaconConsumer的实例(通常是ApplicationActivity的实例,否则您需要链接{{1}方法。)

关键是你只能调用这个块:

BeaconConsumer

收到 try { beaconManager.startMonitoringBeaconsInRegion(new Region("e2c56db5-dffb-48d2-b060-d0f5a71096e0", null, null, null)); } catch (RemoteException e) { } 的回复后。此代码通常应该在该回调中。因为异常块是空的并且什么都不记录,所以我怀疑代码抛出了这个异常并且无声地失败。您应始终至少在异常块中记录错误,以帮助查找此类问题。

问题2:

区域的构造函数应如下所示:

onBeaconServicecConnected

请注意,第一个参数是一个字符串,用作区域的唯一标识符,以便稍后使用相同的标识符来停止或替换受监视的区域。第二个参数是ProximityUUID,第三个和第四个参数分别是主要和次要参数。

在显示的代码中构造标识符的方式应该有效,因为它定义了一个唯一的id“e2c56db5-dffb-48d2-b060-d0f5a71096e0”,ProximityUUID / major / minor值都是null,因此是通配符。然而,这是误导性的,因为它表明它正在寻找特定的ProximityUUID,而不是。