监控 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 取决于您的用例。
我对使用 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 取决于您的用例。