一段时间后,CoreLocation在后台停止工作

时间:2014-08-19 22:03:05

标签: ios objective-c core-location cllocationmanager ios-background-mode

我正在开发一个适用于运行的iOS(7.0+)应用程序,该应用程序使用用户GPS位置,进行小规模计算并将数据传输到蓝牙低功耗(4.0)手表。此过程需要在后台进行,即使用户锁定其iOS设备也是如此。

我也实现了以下背景模式:

 App communicates using CoreBluetooth
 App registers for location updates

我已经成功地使一切运行良好,除了在设备锁定一段时间后(例如2小时),iOS设备停止更新位置,因为我可以看到它不是更长时间将更新GPS值发送到蓝牙手表。然后,我必须解锁设备,重新打开应用程序和位置服务,因为它应该再次工作。

有没有人知道如何让位置服务在后台运行(设备已锁定),而不会在一定时间后突然停止位置更新?如果可能的话,一个有效的解决方案是优选的,不会比正常情况下使用GPS消耗太多电池。

1 个答案:

答案 0 :(得分:10)

最重要的是:确保在开始pausesLocationUpdatesAutomatically之前将NO设置为CLLocationManager(请参阅docs)。

为了最大限度地减少电池使用量,您还应该使用延迟位置更新(more details on SO)。当GPS芯片为您收集位置更新时,这允许CPU休眠并节省电池电量。它会定期将它们转储到CPU。如果您需要每秒更新一次手表,这可能不适合您,但如果您每隔10或20或30秒更新一次,它将节省许多CPU唤醒。