iOS:CLLocationManager的didEnterRegion未调用

问题描述 投票:5回答:2

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

我有一个简单的测试应用,其中有一个MKMapView,可以看到我的当前位置,我的区域也在地图上绘制为一个红色圆圈,因此我实际上可以“物理地”看到我要进入或退出的位置这个地区。在didEnterRegiondidExitRegion方法中,我触发了一个UIAlertView

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

我读过(我认为),有时只有当您离开该区域一定距离时,它才起作用,所以我一直走着。

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

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

CLLocationManagerDelegate是我的应用程序委托,当我的didStartMonitoringForRegion正常触发时,看起来不错。

我还有其他东西吗?

ios objective-c uialertview cllocationmanager cllocation
2个回答
2
投票

该文档指出,区域监视与其他位置服务无关。这意味着调用startMonitoringForRegion就足够了。

请确保:

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

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

在iOS 6中,半径在1至400米之间的区域效果更好在iPhone 4S或更高版本的设备上。 (在iOS 5中,半径为在iPhone 4S及更高版本的设备上,距离1至150米更好。)在这些设备上,应用程序可以预期接收适当的区域在3至5分钟内进入或退出区域的通知平均,如果不是很快的话。

应用程序可以在设备移动500米后立即收到通知或之前通知中的更多内容。它不应该期望通知的频率超过每五分钟一次。如果设备能够从网络,位置管理器中检索数据更可能及时发送通知。

我希望这会有所帮助。


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.