我有一个问题,就是使用AltBeacon库监控多个地区的Eddystone信标。
例如,我有3个信标,每个信标都分配给另一个区域,区域是根据信标的实例值定义的,即(“region1”,null,“InstanceValueOfBeacon”,null)和我对每个didEnterRegion都有不同的操作。现在我将所有信标放在一起。应用程序将如何响应?是否会继续在不同地区之间切换,因为找到了多个信标?它是否仅仅是首次发现的信标的动作?或者它是如何工作的?
答案 0 :(得分:0)
监控传输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
匹配的所有可见信标。您使用Monitoring API还是Ranging API取决于您的使用案例。