5

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

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

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

我在 SO(我认为)上读到,有时它仅在您离开该区域一定距离时才有效,所以我继续走。

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

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

CLLocationManagerDelegate是我的应用程序委托,看起来很好,因为我didStartMonitoringForRegion的触发正常。

我还缺少什么吗?

4

2 回答 2

2

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

确保:

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

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

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

一旦设备从之前的通知移动 500 米或更远,应用程序就会收到通知。它不应期望通知的频率超过每五分钟一次。如果设备能够从网络检索数据,则位置管理器更有可能及时传递通知。

我希望这有帮助。

于 2013-04-22T17:27:54.130 回答
0

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

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

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

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

于 2015-03-02T16:04:49.123 回答