繁体   English   中英

iOS:未调用 CLLocationManager 的 didEnterRegion

[英]iOS: CLLocationManager's didEnterRegion not called

我已经成功注册了一个区域或监控,我知道这是因为didStartMonitoringForRegion方法被触发了。

我有一个带有MKMapView的简单测试应用程序,我可以在其中查看我的当前位置,我还在地图上将我的区域绘制为一个红色圆圈,这样我实际上可以“物理地”看到我在什么时候进入或离开这个区域。 didEnterRegiondidExitRegion方法中,我有一个触发的UIAlertView

不久前,我决定离开办公室,带着我的 iPhone 4 散步,看看这是否可行。 我从该区域的中间(半径约 200m)开始,我的应用程序一直处于前台。 我走了几个街区,离开了该地区,什么也没发生。

我在 SO(我认为)上读到,有时它仅在您离开该地区一定距离时才有效,因此我继续步行。

又过了 200m 左右,我放弃了,因为UIAlertView仍然没有显示,然后开始往回走。 显然,在重新进入该区域时, didEnterRegion也没有触发。

我没有在我的代码中的任何地方调用[locationManager startUpdatingLocation] ,我应该吗? 我只是真正创建区域并调用[locationManager startMonitoringForRegion]

CLLocationManagerDelegate是我的应用程序委托,看起来不错,因为我的didStartMonitoringForRegion正在正确触发。

我还缺什么吗?

该文档指出,区域监控独立于其他位置服务工作。 这意味着调用 startMonitoringForRegion 就足够了。

确保:

  • [CLLocationManager regionMonitoringAvailable] 返回 YES
  • CLLocationManager.monitoredRegions 包含有效区域

注意:该文档指定事件需要 3-5 分钟才能触发。

在 iOS 6 中,半径在 1 到 400 米之间的区域在 iPhone 4S 或更高版本的设备上效果更好。 (在 iOS 5 中,半径在 1 到 150 米之间的区域在 iPhone 4S 和更高版本的设备上效果更好。)在这些设备上,应用程序可以期望在平均 3 到 5 分钟内收到适当的区域进入或区域退出通知,如果不早点。

只要设备从之前的通知移动 500 米或更远,应用程序就会收到通知。 它不应期望比每五分钟更频繁地收到通知。 如果设备能够从网络检索数据,位置管理器就更有可能及时发送通知。

我希望这有帮助。

需要注意的一件事(如果您正在模拟位置):

如果即使您认为代码中的所有操作都正确但从未调用进入和退出,请确保通过以下方式检查是否禁用了位置模拟:

转到产品 -> 方案 -> 编辑方案 -> 选项选项卡 -> 禁用位置模拟。

我试图通过在模拟位置的同时实际走出和进入该区域来测试我的区域监控,正是由于这个原因,它对我不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM