MyCLLocationManager
在用户首次进入应用程序时启动。我这样初始化它:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kDistanceFilter;
self.locationManager.headingFilter = kHeadingFilter;
我正在使用地理围栏。
我在.plist中定义了required background modes
。
如果我在模拟器中使用gpx文件测试应用程序,它运行良好。到目前为止,一切都很好。
然而,我在这两个链接中读到:
从后台任务启动iOS 7中的位置管理器
后台定位服务在iOS 7 中不起作用
在iOS7
中,当位置在几分钟内没有改变时,CLLocation
进入睡眠状态。
我的问题是:
我根本不叫didUpdateLocation
,我只想要didEnterRegion
或didExitRegion
。从理论上讲,即使应用程序被杀,或者用户位置在最后一个小时内没有改变,然后决定移动,它会起作用吗?
您的问题中有几个元素:
1-为了不重复之前的答案,我会首先在这个链接上查看我的答案。它将帮助您解决在用户停止移动时核心位置更新停止的问题,以及如何修改这种行为:iOS7核心位置未更新
2-如果用户在iOS7中杀死了一个应用程序(通过在应用程序切换器中轻弹它),该应用程序将不会重新启动,因此,在手机重新启动后,您的位置更新和区域监控都不会重新启动。另一方面,如果应用程序因内存压力而关闭,iOS将重新启动应用程序,并在后台重新启动您的位置更新和区域监控。此外,如果重新启动手机,区域监控将自动重新启动。显然,您必须启用后台模式。
3-现在你在问题中谈论的是区域,所以我假设你已经实现了CLCircularRegion。如果没有,那应该是第一步,然后"启动MonitoringForRegion"。在您的情况下,即使用户已经停止移动一段时间,然后开始移动,当应用程序进入或退出某个区域时,应用程序也会被唤醒/委派。
4-确保也使用locationManager:didDetermineState:forRegion:。这将允许应用程序在启动时确定它是在区域内还是在区域外。当你想到一个应用程序正在启动,并且没有发生区域交叉时,这很有用,但知道用户是在区域内还是在区域外很重要。
希望这能帮助