我的CLLocationManager
在用户首次进入应用程序时启动。我正在这样初始化它:
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文件在模拟器中测试了该应用程序,则可以正常运行。到目前为止,一切都很好。
但是,我阅读了以下两个链接:
Start Location Manager in iOS 7 from background task
Background Location Services not working in iOS 7
iOS7
中的位置,如果位置在几分钟内没有变化,则CLLocation
进入睡眠状态。我的问题是:
我根本不叫
didUpdateLocation
,我只想要didEnterRegion
或didExitRegion
。从理论上讲,即使应用程序被杀死或者用户位置在过去一小时内未更改,然后决定移动,它是否仍能正常工作? 最佳答案
您的问题中包含一些要素:
1-为了不重新散列上一个答案中的内容,我将首先在此链接上查看我的答案。如果用户停止移动,它将帮助您解决核心位置更新停止的问题,以及如何修改该行为:
iOS7 Core Location not updating
2-如果用户在iOS7中杀死了一个应用程序(通过在应用程序切换器中将其弹起),则该应用程序将不会重新启动,因此重启手机后,您的位置更新或区域监控都将不会重新启动。另一方面,如果由于内存压力而终止了该应用程序,则iOS将重新启动该应用程序,并在后台重新启动位置更新和区域监视。另外,如果重新启动电话,则区域监视将自动重新启动。您显然必须启用了后台模式。
3-现在您正在谈论问题中的区域,所以我假设您已实现CLCircularRegion。如果不是,那应该是第一步,然后是“startMonitoringForRegion”。在您的情况下,即使用户已停止移动一会儿然后开始移动,当该应用进入或退出某个区域时,该应用也会被唤醒/删除。
4-确保还使用locationManager:didDetermineState:forRegion:。这样一来,应用即可在启动时确定它是在区域内还是区域外。当您想到某个应用程序正在启动并且没有发生区域交叉时,这很有用,但是了解用户是在区域内部还是外部,这一点很重要。
希望这可以帮助