对于一个属于科学研究的应用程序,我必须实现位置跟踪(参与研究的用户知道这一点,并愿意提供这些数据)。此应用程序的两个前提是:
- 在用户移动时,以尽可能高的精度跟踪用户的位置
- 尽可能少用电,这样用户在不使用应用程序时就不会觉得有必要关闭应用程序(关闭定位服务)
我知道这两个要求通常是相互排斥的:)所以一般的问题是"在这里,在中间满足什么是最好的策略?"
我的想法是在位置不断变化的情况下,像往常一样以最高的精度进行监控。如果我们检测到这些位置更新之间的差值在一段时间内几乎为0,我们会假设用户不再"移动",并将切换到区域监控(半径为40米)。一旦用户退出该区域,我们就会切换回常规的位置监控。
所以有两个问题:
- 你能告诉我提议的方法是否适用于在后台运行的应用程序吗
- 你有没有实施过类似的措施,知道它是否真的节省了很多电池电量
问候,
Sebastian
我的想法是在位置不断变化的情况下,像往常一样以最高的精度进行监控。如果我们检测到这些位置更新之间的差值在一段时间内几乎为0,我们会假设用户不再"移动",并将切换到区域监控(半径为40米)。一旦用户退出该区域,我们就会切换回常规的位置监控。
使用区域监控来重新参与位置监控有一些缺点,我发现:
如果你为用户的当前位置设置了一个区域,然后等待-didExitRegion
开火,你将依赖于系统的默认半径缓冲(可能是200米)和他们越过边界后的一段时间(可能是20秒),然后你才会收到消息。如果准确度是你的主要目标,那么在开始区域监控和离开区域之间,你可能会丢失很多数据点。这能满足你的需要吗?
因此,为了回答您的问题:
你能告诉我提议的方法是否适用于在后台运行的应用程序吗?
在后台运行这种类型的东西应该不会有任何问题。如果您已将应用程序设置为后台,则位置监控和区域监控都可以工作。此外,为了确保区域监控在iOS 7上工作,您必须为应用程序打开后台应用程序刷新。那把我绊倒了。
你有没有实施过类似的措施,知道它是否真的节省了很多电池电量?
根据我们的经验,电池的节省并不明显。区域监控可能会消耗电池,这与高精度位置更新一样重要,因为它使用各种硬件来完成它的任务。所以选择你的毒药。苹果公司对节省电池的建议是,而且一直是使用重大变更定位服务。它为您提供了良好的位置数据,只是不那么频繁。