1

我的应用程序注册后台位置更新(不是重大更改,我需要更多的粒度比公里)停止CoreLocation后台更新

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

不过,我不确定如果这实际上将接受背景更新位置停止我的应用程序,或者如果它,但会忽略他们。理想情况下,除了用户活动后的一小段时间外,我不希望我的应用程序对电量消耗负责。

苹果的文档往往会寄给我这个圈子。正当我认为“在后台执行代码”即将泄漏答案时,它会将我引导至“位置感知编程指南”。正确的时候,这个人将要回到“在后台执行代码”。 :)

+0

注意:我对重大更改位置更新不感兴趣。我在城市和郊区进行了广泛的测试,即使经过3公里的旅行,我也会得到0次更新。我希望获得高质量的位置数据,但在应用程序使用期间的有限时间内可能会持续一小时。我只想确认是否'''stopUpdatingLocation'''实际上会停止GPS/wifi无线电三角测量/三边测量。谢谢! :) –

回答

1

我不知道你的应用程序是否有在这个总控制,但对于stopUpdatingLocation的文档做说明如下......

禁用事件传递给接收器禁用的选择相应的硬件(从而降低功耗)时,没有客户需要的位置数据

这将表明应您的应用请求的背景位置数据的只有一个,而你要求它停止GPS接收器将禁用相应的哈日为了节省电力,我想这是你要找的。

我可以建议是,你能的电能记录设置 - >开发,然后运行你的应用程序的一个小时左右到一个地步,你认为GPS是禁用的,运行一个小时,然后比较仪器的用电量。这应该为您提供更清晰的画面。

+0

谢谢你的指针。我会给你一个镜头。需要一段时间才能确切知道我的应用是否运行良好,但值得花时间进行投资。我只希望Apple的文档中有一个明确的答案,说明如此重要的事情。他们真的试图让人们进入重大变革(可以理解,因此,电池方式),但有太多的应用程序想知道离开用户一两个街区是怎么回事。 –

0

调用stopUpdatingLocation确实会停止GPS等,但如果您将此调用放入您的CLLocationManager delegatelocationManager:didUpdateToLocation:fromLocation,那么它可能永远不会被调用。

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

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

也许beginBackgroundTaskWithExpirationHandler:是更好的解决方案的关键,但我还没有完全弄明白。