如何在定位精度和功率效率之间走一条路?

时间:2013-02-18 06:39:51

标签: iphone cocoa-touch core-location cllocationmanager background-process

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

  1. 使用startMonitoringSignificantLocationChanges

    • GPS永远不会被激活
    • 当检测到无线电塔的更改时,它只调用didUpdateLocations(或ios< 6的didUpdateToLocation)
    • selectedAccuracy和distanceFilter属性都被忽略
  2. 使用startUpdatingLocation

    • 电池耗尽量
    • 只要手机中的某些硬件有一些数据要提供,就会调用
    • didUpdateLocations。并且因为有多个硬件组件可用于定位(GPS,无线电,wifi),所以无法保证更新时间或更频繁地调用更新位置,或者新读数是否会比前一个更准确
    • 第一个数字通常不好,因为它们不依赖于GPS
    • 没有确定的方法可以知道我们是否拥有我们将获得的最佳位置:只需在所有位置中挑选一个在给定时间窗口内获得最佳精确度的位置
  3. 我没有看到关于任何中间路线的讨论或文档。如果我想要注重节能但在用户移动时获得相当准确的数据怎么办?似乎可能的妥协方法是:

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

    据我所知,这种方法在前景和背景方面都是一样的,并且会在Apple支持的两种标准方法之间做出一些折衷。

    问题:
    - 我的理解是否正确,我的“妥协”方法听起来不错? - 有没有人成功使用过这种方法? - 采用这种方法需要注意什么? - 那里有更好的妥协方法吗?

    PS:我想我以后可以改进这种方法来考虑估计的行驶速度,以便在旅行时我不会经常使用GPS。

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,它的范围很广,你想要这个注重电池的代码有多复杂。最简单的解决方案显然只是总是使用GPS,但是你可以非常快速地获得非常复杂的功能,例如每隔x个时间采样一次,找到最准确的,预测用户在下一个样本前的时间使用以前的样本等

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

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

希望这有帮助!