如何在设备休眠时保持 GPS 处于全功率状态

Posted

技术标签:

【中文标题】如何在设备休眠时保持 GPS 处于全功率状态【英文标题】:How to keep gps at full power while device sleeps 【发布时间】:2016-06-13 11:20:34 【问题描述】:

我的应用需要(尽可能准确地)记录用户在一段时间内的位置和移动。如果我让设备休眠,GPS 精度似乎会自动降低。我可以阻止它进入睡眠状态,但显然这会进一步消耗电池。我想让显示器休眠,但保持位置管理器的最大精度。我在后台模式部分勾选了位置更新。我的代码看起来像这样...

    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
    locationManager.distanceFilter = 1
    locationManager.activityType = .Fitness
    locationManager.requestAlwaysAuthorization()
    locationManager.pausesLocationUpdatesAutomatically = false
    locationManager.startUpdatingLocation()

        UIApplication.sharedApplication().idleTimerDisabled = true

我真的很想删除最后一行,但我在 4s 上所做的所有测试表明,一旦设备进入睡眠状态,它就会失去准确性。

【问题讨论】:

您能否定义“位置管理器失去准确性”?您在此处如何准确定义精度 - 报告位置的水平精度、距离过滤器还是其他? 是的,感谢您的回复。我正在测量水平精度 (.horizo​​ntalAccuracy)。 你能告诉我.horizo​​ntalAccuracy在从前台到后台最后到挂起模式时是如何变化的吗?你能发布样本读数吗?我只对三个变量感兴趣:horizo​​ntalAccuracy、speed 和 timestamp。 我已将我的应用程序更改为 9.0 并使用您的答案解决了问题。它运作良好。谢谢。 【参考方案1】:

假设是 ios 9,你还需要这一行:

locationManager.allowsBackgroundLocationUpdates = true;

默认情况下,此 var 设置为 false,这意味着 iOS 不会向暂停的应用提供位置更新。

【讨论】:

我的目标是 iOS 8。你知道是否有办法使用那个版本吗? allowBackgroundLocationUpdates 变量只允许覆盖 iOS9 引入的新电池保护行为并恢复到 iOS8 操作模式。

以上是关于如何在设备休眠时保持 GPS 处于全功率状态的主要内容,如果未能解决你的问题,请参考以下文章

如何检查线程是不是处于休眠状态?

运行程序时保持 iphone 处于活动状态

如何在应用程序处于后台时保持GPS接收器位置更新(Google Play服务位置API)

平板电脑处于待机状态时,我的 GPS 应用程序是不是可以继续在后台运行?

如何保持用户 iPhone 的显示屏处于开启状态?

保持 iPod 空闲并且仍然能够联系服务器