0

我有一个关于使用 AltBeacon 库使用 Eddystone 信标监控多个区域的问题。

比如说我有 3 个信标,每个信标都分配给另一个区域,并且这些区域是根据信标的实例值定义的,即(“region1”,null,“InstanceValueOfBeacon”,null),我有一个每个 didEnterRegion 的不同操作。

现在,当我将所有信标彼此相邻放置时。应用程序将如何响应?它会因为找到多个信标而继续在不同区域之间切换吗?它只是执行第一次找到的信标的动作吗?或者这究竟是如何工作的?

4

1 回答 1

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 的工作方式。也有 Ranging API 以大约 1Hz 的频率为您提供回调,其中列出了与Region. 您是使用监控 API 还是范围 API 取决于您的用例。

于 2015-09-30T13:14:00.080 回答