在 didExitRegion 之后调用 iOS didRangeBeacons

Posted

技术标签:

【中文标题】在 didExitRegion 之后调用 iOS didRangeBeacons【英文标题】:iOS didRangeBeacons called after didExitRegion 【发布时间】:2014-05-08 18:39:07 【问题描述】:

我在 ios 中遇到了一个关于 iBeacon 监控的奇怪问题。

我正在运行的测试是,

1.开始监测信标区域。

2.等待几秒钟,然后打开信标。

3.didEnterRegion 被调用,我调用 startRangingBeacons。

4.我开始通过 didRangeBeacons 定期接收回调。

5.我关闭信标,并继续接收 didRangeBeacon 回调一两秒。

6.然后我收到 didExitRegion。

7.现在有点奇怪,然后我再次调用了 didRangeBeacons。

如果我在此之后重新打开信标,则不会调用 didEnterRegion,尽管确实调用了 didExitRegion。对 didRangeBeacons 的恶意调用似乎意味着 iOS 现在认为信标再次在范围内。

这是人们期望的行为吗?或者这是否表明我的代码有问题?

编辑:

我在运行 7.0.6 的 iPhone 4 上看到了这种行为,如果我用运行 7.1 的 5C 和运行 7.1.1 的 5S 运行相同的测试,一切都很好。

【问题讨论】:

我没想到会这样。您能否发布设置监控以及回调实现的代码?否则无法知道它不是代码。 【参考方案1】:

我也不希望有这种行为。然而,在didRangeBeacons:inRegion: 的讨论中,它说:

只要信标进入范围内或超出范围

,位置管理器就会调用此方法

这可能是您在第 7 条中提到的行为的解释。

然而,没有提到这个超出范围调用是在监视器委托调用之前还是之后执行的。同样,这也不能解释为什么您不再收到 didEnterRegion: 电话。

【讨论】:

以上是关于在 didExitRegion 之后调用 iOS didRangeBeacons的主要内容,如果未能解决你的问题,请参考以下文章

iOS Beacon Monitoring - didEnterRegion 仅在受监控区域触发 didExitRegion 后调用

监控 CLCirculerregion didStartMonitoring 调用,但 didEnterRegion 或 didExitRegion 从未调用

未调用 didEnterRegion 但在目标 C 中调用了 didExitRegion

CLLocation 区域监控已启动,但没有在 iPhone 上调用 didExitRegion

locationManager didExitRegion 在监控区域时从未调用 iBeaconRegion

locationManager:didExitRegion: 应用程序运行时未调用