并非所有活动的iBeacons都被locationManager检测到:didRangeBeacons:inRegion:

时间:2014-06-06 12:12:21

标签: ios ibeacon

我为了测试iOS的iBeacon应用程序,我已经配置了一个带有四个BLE usb加密狗的RaspberryPi来模拟真正的iBeacons。

所有iBeacons都被检测到但不是同时。传递给locationManager的信标数组:didRangeBeacons:inRegion:方法包含不超过2个iBeacons,并且几乎在每次调用时都会更改内容。

我应该如何解释locationManager的文档:didRangeBeacons:inRegion:method?

信标 : 表示当前在范围内的信标的CLBeacon对象数组。您可以使用这些对象中的信息来确定每个信标的范围及其标识信息。

讨论 : 只要信标进入范围或超出范围,位置管理器就会调用此方法。当信标的范围改变时,位置管理器也调用该方法;例如,当信标靠近时。*

在我看来,范围内的所有信标都应该在 beacons 数组中。如果不是,那么如何确定超出范围的信标?或者由于假信标可能会出现这个问题?


更新

我添加了另一个BLE usb加密狗,现在设备每次都检测到三个信标。在我看来,设备没有在先前扫描窗口中检测到的信标的存储器。 this图片说明了我对这种行为的理解。

最后,设备检测到所有信标可能是因为扫描周期中存在一些随机延迟(如图所示)和/或信标传输中的其他延迟。

1 个答案:

答案 0 :(得分:0)

了解该方法每秒调用一次对于您正在测距的每个区域。每次调用仅包括在同一区域中的第二个句点中可见的信标。请注意,区域对象也在方法中传递。

编辑:进一步的调查显示,提问者使用的是Raspberry Pi iBeacon发射器,可能每1280毫秒发送一次广告,这肯定会导致问题报告。解决方案是增加广告频率,使每秒至少有一个数据包发出(理想情况下,最佳距离估计值为10Hz或更高)。