监控 Eddystone 信标

Monitoring Eddystone beacons

我对使用 AltBeacon 库使用 Eddystone 信标监控多个区域有疑问。

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

现在,当我将所有信标并排放置时。应用程序将如何响应?它会因为发现多个信标而继续在不同区域之间切换吗?它只是做第一个发现的信标的动作吗?或者它究竟是如何工作的?

监听发送Eddystone-UID的beacon时,区域设置如下:

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 构造函数的最后一个参数也是空的,因为 Eddystone-UID 信标只有两个标识符。代码在最后两行开始监视每个区域。

第一次检测到与第一个区域匹配的任何信标(例如具有第一个命名空间标识符的信标)时,将触发 didEnterRegion 回调,传递对 eddystoneUidRegion1 对象的引用。如果检测到与第二个区域匹配的任何信标,也会发生等效回调。您可以通过检查传递给回调的 Region 对象的内容来判断检测到了哪一个。当与受监控区域匹配的所有信标消失时,didExitRegion 存在不同的回调。

这就是 Monitoring API 的工作原理。还有测距 API 以大约 1Hz 的频率为您提供回调,其中包含与 Region 匹配的所有可见信标的列表。使用 Monitoring API 还是 Ranging API 取决于您的用例。