我有一个关于使用 AltBeacon 库使用 Eddystone 信标监控多个区域的问题。
比如说我有 3 个信标,每个信标都分配给另一个区域,并且这些区域是根据信标的实例值定义的,即(“region1”,null,“InstanceValueOfBeacon”,null),我有一个每个 didEnterRegion 的不同操作。
现在,当我将所有信标彼此相邻放置时。应用程序将如何响应?它会因为找到多个信标而继续在不同区域之间切换吗?它只是执行第一次找到的信标的动作吗?或者这究竟是如何工作的?
我有一个关于使用 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 的工作方式。也有 Ranging API 以大约 1Hz 的频率为您提供回调,其中列出了与Region. 您是使用监控 API 还是范围 API 取决于您的用例。