我正在开发一个适用于运行的iOS(7.0+)应用程序,该应用程序使用用户GPS位置,进行小规模计算并将数据传输到蓝牙低功耗(4.0)手表。此过程需要在后台进行,即使用户锁定其iOS设备也是如此。
我也实现了以下背景模式:
App communicates using CoreBluetooth
App registers for location updates
我已经成功地使一切运行良好,除了在设备锁定一段时间后(例如2小时),iOS设备停止更新位置,因为我可以看到它不是更长时间将更新GPS值发送到蓝牙手表。然后,我必须解锁设备,重新打开应用程序和位置服务,因为它应该再次工作。
有没有人知道如何让位置服务在后台运行(设备已锁定),而不会在一定时间后突然停止位置更新?如果可能的话,一个有效的解决方案是优选的,不会比正常情况下使用GPS消耗太多电池。
答案 0 :(得分:10)
最重要的是:确保在开始pausesLocationUpdatesAutomatically
之前将NO
设置为CLLocationManager
(请参阅docs)。
为了最大限度地减少电池使用量,您还应该使用延迟位置更新(more details on SO)。当GPS芯片为您收集位置更新时,这允许CPU休眠并节省电池电量。它会定期将它们转储到CPU。如果您需要每秒更新一次手表,这可能不适合您,但如果您每隔10或20或30秒更新一次,它将节省许多CPU唤醒。