2

我正在开发一个需要在前台和后台工作并发送位置数据的应用程序。我还没有编写代码,只是熟悉了 CoreLocation 如何确定要遵循的方法。从我到目前为止所做的阅读中,我收集到:

  1. 使用 startMonitoringSignificantLocationChanges

    • GPS从未激活
    • 当检测到无线电塔发生变化时,它只调用 didUpdateLocations(或 ios<6 的 didUpdateToLocation)
    • desiredAccuracy 和 distanceFilter 属性都被忽略
  2. 使用 startUpdatingLocation

    • 电池消耗更高
    • 每当手机中的某些硬件需要提供一些数据时,就会调用 didUpdateLocations。并且由于有多个硬件组件可用于定位(GPS、无线电、wifi),因此无法保证何时或多久调用一次 didUpdateLocations,或者新读数是否会比前一个读数更准确
    • 第一个数字通常不好,因为它们不依赖 GPS
    • 没有确定的方法可以知道我们是否拥有我们将获得的最佳位置:这只是在所有接收到的位置中挑选一个在给定时间窗口内具有最佳精度的位置的问题

然而,我没有看到太多关于任何中间路线的讨论或文档。如果我想提高功耗意识,但在用户大幅移动时获得相当准确的数据怎么办?似乎一种可能的折衷方法是:

  • 打开 startMonitoringSignificantLocationChanges
  • 在调用 didUpdateLocations 时切换到使用 startUpdatingLocation
  • 稍等片刻,让 GPS 有机会获得一些好的读数并选择精度最高的读数
  • 切换回使用 startMonitoringSignificantLocationChanges 等等...

据我所知,这种方法在前台和后台的工作方式相同,并将在 Apple 支持的两种标准方法之间提供一些折衷。

问题:
- 我的理解是否正确,我的“妥协”方法是否合理?
- 有没有人成功使用过这种方法?
- 这种方法有哪些注意事项?
- 有没有更好的折衷方法?

PS:我想我以后可以改进该方法以考虑估计的旅行速度,这样我就不会在人们旅行时经常使用 GPS。

4

1 回答 1

0

有多种方法可以解决这个问题,其范围从您希望这个电池意识代码获得的复杂程度。最简单的解决方案显然是始终使用 GPS,但是您可能会很快变得非常复杂,例如每 x 时间采样一次,找到最准确的,预测用户在下一个采样前的位置使用以前的样本等。

  • 妥协的想法很好,但是您需要考虑您希望用户使用您的应用程序的程度、运行时间以及您需要数据的准确性。最后,在找出 GPS 和粗略数据的最佳组合是什么时,需要反复试验。您应该知道,重大变化不会经常发生,但显然这是相对的。如果您的应用程序依赖于以 60 英里/小时的速度驾驶汽车的用户,那么它可能不会花很长时间,但如果它有人四处走动,那么触发重大变化(如果有的话)可能需要更长的时间。
  • 我个人以前没有使用过这种方法,但是我使用 CoreLocation 完成的所有应用程序都需要在短时间内非常准确的位置数据。
  • 这种方法的注意事项是,它需要大量的试验和错误,并且可能会降低您的应用程序的性能。在开始编写此代码之前,您应该确定完成这项工作的时间是否最终会得到回报。此外,如果您确实决定根据样本确定用户在哪里旅行,您将需要确定这是否真的可以节省电池——这样的计算在电池方面可能会非常昂贵。
  • 老实说,CoreLocation 并没有那么耗电,Apple 一直在不断改进它的能源使用。例如,查看 iOS 版 Moves。作为它的用户,我可以说电池效应几乎没有,而且它总是 24/7 全天候使用我的位置。

如果我没记错的话,Instruments 允许您监控电池使用情况,因此如果您决定做出妥协以帮助您进行试验和错误,您可以使用它。

希望这有帮助!

于 2013-02-26T00:55:31.957 回答