我正在开发一个需要在前台和后台工作并发送位置数据的应用程序。我还没有编写代码,只是熟悉了 CoreLocation 如何确定要遵循的方法。从我到目前为止所做的阅读中,我收集到:
使用 startMonitoringSignificantLocationChanges
- GPS从未激活
- 当检测到无线电塔发生变化时,它只调用 didUpdateLocations(或 ios<6 的 didUpdateToLocation)
- desiredAccuracy 和 distanceFilter 属性都被忽略
使用 startUpdatingLocation
- 电池消耗更高
- 每当手机中的某些硬件需要提供一些数据时,就会调用 didUpdateLocations。并且由于有多个硬件组件可用于定位(GPS、无线电、wifi),因此无法保证何时或多久调用一次 didUpdateLocations,或者新读数是否会比前一个读数更准确
- 第一个数字通常不好,因为它们不依赖 GPS
- 没有确定的方法可以知道我们是否拥有我们将获得的最佳位置:这只是在所有接收到的位置中挑选一个在给定时间窗口内具有最佳精度的位置的问题
然而,我没有看到太多关于任何中间路线的讨论或文档。如果我想提高功耗意识,但在用户大幅移动时获得相当准确的数据怎么办?似乎一种可能的折衷方法是:
- 打开 startMonitoringSignificantLocationChanges
- 在调用 didUpdateLocations 时切换到使用 startUpdatingLocation
- 稍等片刻,让 GPS 有机会获得一些好的读数并选择精度最高的读数
- 切换回使用 startMonitoringSignificantLocationChanges 等等...
据我所知,这种方法在前台和后台的工作方式相同,并将在 Apple 支持的两种标准方法之间提供一些折衷。
问题:
- 我的理解是否正确,我的“妥协”方法是否合理?
- 有没有人成功使用过这种方法?
- 这种方法有哪些注意事项?
- 有没有更好的折衷方法?
PS:我想我以后可以改进该方法以考虑估计的旅行速度,这样我就不会在人们旅行时经常使用 GPS。