我有一个关于使用AltBeacon库监控Eddystone信标的多个区域的问题。
举个例子,我有3个信标,每个信标被分配到另一个区域,这些区域是根据信标的实例值定义的,即("region1",null,"InstanceValueOfBeacon",null),我对每个didEnterRegion都有不同的动作。
现在当我把所有的信标放在一起。应用程序将如何响应?它会因为找到多个信标而继续在不同区域之间切换吗?它只是执行第一次发现的信标的操作吗?或者说这到底是怎么回事?
在监视传输Eddystone-UID的信标时,应该这样设置区域:
Identifier eddystoneNamespaceId1 = Identifier.parse("0x00000000000000000001");
Identifier eddystoneNamespaceId2 = Identifier.parse("0x00000000000000000002");
Region eddystoneUidRegion1 = new Region("eddystoneUidRegion1",
eddystoneNamespaceId1, null, null);
Region eddystoneUidRegion2 = new Region("eddystoneUidRegion1",
eddystoneNamespaceId2, null, null);
beaconManager.setRangeNotifier(this);
beaconManager.startMonitoringBeaconsInRegion(eddystoneUidRegion1);
beaconManager.startMonitoringBeaconsInRegion(eddystoneUidRegion2);
在本例中,定义了两个不同的区域,每个区域都有一个10字节的Eddystone-UID名称空间标识符,以及一个空Eddystone-UID实例标识符,因此它将与那些名称空间匹配所有信标。传递给Region
构造函数的最后一个参数也是null,因为Eddystone-UID信标只有两个标识符。代码在最后两行开始监视每个区域。
第一次检测到任何与第一个区域匹配的信标(例如具有第一个命名空间标识符的信标),将触发didEnterRegion
回调,传递对eddystoneUidRegion1对象的引用。如果检测到任何与第二个区域匹配的信标,也会发生等效的回调。您可以通过检查传递给回调的Region
对象的内容来判断检测到哪一个。当所有与监视区域匹配的信标消失时,didExitRegion
存在不同的回调。
这就是监视api的工作方式。还有一些测距api,它们会以大约1Hz的频率给你一个回调,其中包含与Region
匹配的所有可见信标的列表。您是使用监视api还是范围api取决于您的用例。