我想在后台跟踪用户位置,以便在他靠近他的一位 friend 时向他显示警报。
所以我从 CLLocationManager 开始。据我所知,即使用户重新启动 Iphone 或终止应用程序,它们也是让应用程序了解位置更新的唯一一种可靠方法:startMonitoringSignificantLocationChanges 。但问题是,即使在一个有很多 wifi 的城市内,startMonitoringSignificantLocationChanges 会在用户移动 1 公里左右时触发 DidUpdateLocations ,这对我的需求来说实在是太多了
另一方面,startUpdatingLocation 以良好的间隔触发 DidUpdateLocations (甚至太多,因为即使用户不移动它也会经常触发 DidUpdateLocations )。但是 startUpdatingLocation 在 iphone 重新启动或应用程序被用户杀死后无法生存。另外我怀疑即使精度为 100m,startUpdatingLocation 也会消耗大量电池。
所以问题是:我可以在我的应用中使用什么策略来有效地跟踪,而不会消耗太多电池全时用户位置?我需要大约 100m 的精度,如果可能的话,每条轨道的间隔在 2.5 到 5 分钟之间(我没有找到任何选项来指定在捕捉新位置之前等待的延迟)
其实我想这样做:
- 2 个
locationManager 、1 个 GPS 和 1 个 重大变化
- 当应用启动时,我使用 significantChangesLocationManager:
startMonitoringSignificantLocationChanges 和 startMonitoringVisits
- 我还调用 GPSLocationManager
startUpdatingLocation 来检索准确的用户位置。我设置了 PausesLocationUpdatesAutomatically(true) 以便 GPSLocationManager 迟早会自行停止
- 在
DidUpdateLocations 由 GPSLocationManager 引发我开始使用 significantChangesLocationManager
您如何看待这种策略?
Best Answer-推荐答案 strong>
即使您会收到比您需要的更多的触发器,正如您已经说过的,您可以使用 startMonitoringSignificantLocationChanges 。它以非常节能的方式实现。它允许应用程序被终止,并且只有在 iOS 认为设备发生重大移动时才会再次被唤醒。另一个优点是您的应用不需要 location 后台模式,这可能会在应用审核期间提出问题。
startUpdatingLocation 让应用程序不断更新设备的位置,即使您只收到几个 didUpdateLocations: 事件。此外,iOS 在更新期间无法关闭应用程序,因此会消耗大量电池。
您也可以考虑使用地理围栏,在当前位置周围设置导出地理围栏。但是,重要的位置更新将更加可靠。一旦您已经离开地理围栏,退出地理围栏将不再触发,当手机在地理围栏内关闭并在外面重新打开时,可能会发生这种情况。此解决方案具有不需要后台模式的相同优点。
据我了解您的用例,startMonitoringSignificantLocationChanges 听起来是最佳选择。您无法控制它触发的确切时间间隔和距离,但它非常节能且易于使用。
关于ios - 采用什么策略在后台监控用户位置?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/45147002/
|