ibeacon启动而不是进入或离开区域

时间:2014-02-07 17:29:22

标签: ios ibeacon

我一直在玩各种测试应用程序,可以检测设备何时进入或离开iBeacon的区域,但我的问题是,是否有任何应用程序可以检测到信标何时开启?

我问的原因是,如果我和我的iPhone坐在同一个房间并从信标中取出电池然后重新插入它,我到目前为止所尝试的任何应用程序都不会触发区域输入响应。

请原谅我的非技术问题,直到我发现这种类型的检测是否可行为止我还没有完全沉浸在编码中,因为它可能不适合我的应用程序。

3 个答案:

答案 0 :(得分:0)

我有类似的经历,并假设只有当你四处走动时,电话才会检查新的信标。从节能的角度和信标的主要用例来看,这是有道理的。

答案 1 :(得分:0)

要在信号启动时检测信标,如果 CLLocationManager 对象当前正在为信标设置范围,并且它已经在范围内。

这里要理解的是区域监控和信标测距之间的区别。

某些应用程序仅从区域监控开始,仅在输入区域时开始,并在退出区域时停止测距。(取出电池将导致该区域退出)当您重新放入电池时,由于测距已停止,因此未检测到此情况下的信标。

当您的应用启动时,使用 startRangingBeaconsInRegion:方法启动,并且不要在代码中的任何位置停止此操作。

答案 2 :(得分:0)

从手机的角度考虑:关闭iBeacon看起来与移出发射器范围完全相同。同样,为iBeacon供电看起来与进入其发射器范围完全相同。

iOS CoreLocation监控回调的工作方式(didEnterRegion / didExitRegion)与上述两种情况完全相同。

我怀疑你打开iBeacon时没有看到didEnterRegion回调的原因是因为你没有让它无足够长时间。 iOS CoreLocation需要时间来决定手机退出某个区域,如果它认为手机从未离开过,通常不会告诉您输入了该区域。

有两条建议可以让您更轻松。

  1. 在进行这样的测试时,请始终在预期didEnterRegion事件之前验证是否获得了didExitRegion指示。 (将NSLog行添加到appDelegate以帮助您查看此内容。)

  2. 每当您为iBeacons设置监控时,都会打开iBeacons的范围。当您在前台时,这使得检测区域转换所需的时间更快。

  3. 有关检测区域转换所需时间的更多信息,请参阅this blog post