停止CoreLocation后台更新

时间:2011-07-14 06:32:52

标签: iphone objective-c cocoa-touch core-location cllocationmanager

我的应用程序注册后台位置更新(不是重大更改。我需要更多粒度而不是千米)

那部分工作正常。我只想在应用程序在后台运行60分钟后停止更新。我现在正在这样做的方法是在我的CLLocationManager委托中调用stopUpdatingLocation

但是,我不确定,如果这实际上会阻止我的应用接收后台位置更新,或者 ,但会忽略它们。理想情况下,除了用户活动后的一小段时间,我不想让我的应用程序负责电池消耗。

Apple的文档往往会在这个问题上发送给我。当我认为“在背景中执行代码”即将泄露答案时,它会指引我“位置感知编程指南”。当那个人即将具体了解这个问题时,它会将我发回“后台执行代码”。 :)

2 个答案:

答案 0 :(得分:1)

我不确定您的应用是否具有控制权,但stopUpdatingLocation的文档会说明以下内容......

  

当没有客户需要位置数据时,禁用事件传递使接收器可以选择禁用适当的硬件(从而节省电量)

如果您的应用是唯一一个请求背景位置数据的应用,并且您要求它停止GPS接收器将禁用相应的硬件以节省电量,这我认为这是您正在寻找的。 / p>

我建议您在设置 - >中启用电源记录。开发人员,然后运行您的应用程序一小时左右到您认为GPS被禁用的点,再运行一小时,然后比较仪器中的电量使用情况。这应该会为您提供更清晰的画面。

答案 1 :(得分:0)

呼叫stopUpdatingLocation确实会停止GPS等等,但如果您将此呼叫置于locationManager:didUpdateToLocation:fromLocation的{​​{1}}内,则可能永远不会呼叫。

请记住,只有当更准确的位置或(根据有效距离滤波器)明显不同的位置可用时,才会执行此方法。如果设备根本不移动,并且如果影响准确性的情况也不会改变,则可能几个小时不会被呼叫(我自己已经验证了几分钟)并且GPS也将保持启用这么长时间。

对于仅在前台工作的应用,您可以使用60分钟的CLLocationManager delegate,但对于在后台运行的应用,距离我目前为止找到的工作解决方案最近,是预定的{ {1}}。但即使这样,用户也需要在重新启动应用程序并关闭GPS之前确认警报。

也许NSTimer是更好解决方案的关键,但我还没有完全理解它。