定期停止获取后台位置更新

Posted

技术标签:

【中文标题】定期停止获取后台位置更新【英文标题】:Get background location updates periodically stops 【发布时间】:2019-02-03 01:16:52 【问题描述】:

我正在构建一个简单的 android 应用程序,它基本上使用 Fused Location Services 每分钟在后台定期获取设备的位置。

我已经根据本教程https://codelabs.developers.google.com/codelabs/background-location-updates-android-o/#0实现了应用程序

到目前为止,当我不时使用该设备时,该应用程序运行良好,可以根据需要(每分钟)获取位置。我尝试了另一个我离开设备的测试场景 一夜之间收集位置更新,第二天我查看了我为每次位置更新保存的位置历史记录。我注意到位置更新如下:

前几个小时的位置更新是每分钟(如预期的那样) 然后它开始每隔大约 10 分钟获取一次位置,再持续几分钟 然后它停止了几个小时而没有获得任何位置更新

之后,我拿起设备从一个地方旅行到另一个地方,甚至没有打开设备的屏幕,它开始在我旅行时每分钟更新一次位置。 (这可能是巧合)

注意:以上测试场景是在 pre-oreo 的设备上完成的。

问题:

    当设备自动检测到它开始从一个地方移动到另一个地方然后它停止获取时,是否会开始每分钟更新一次位置? 一旦检测到设备在同一位置几个小时,位置就会更新?

    是否有推荐的方法来保持每分钟始终获取位置更新,即使设备位于同一位置且未使用时也是如此?

我们需要不断获取位置更新,因为这些更新被用作应用程序的心跳。

【问题讨论】:

第一个过渡肯定是打瞌睡。打盹是奥利奥之前的版本,它基本上可以防止任何应用在屏幕关闭且手机处于睡眠状态时唤醒超过一定频率。这个频率大约是每 10-15 分钟一次。第二个可能是更深层次的打瞌睡。如果您不小心点击了屏幕上的按钮,它将解释重新开始的更新。您可以从 Doze 将您的应用程序列入白名单,但它需要由每个用户手动完成 - 无法以编程方式完成。见developer.android.com/training/monitoring-device-state/… 【参考方案1】:

您也可以使用此解决方案:

检查是否停止 2 分钟后未收到位置,然后开始位置更新。

【讨论】:

以上是关于定期停止获取后台位置更新的主要内容,如果未能解决你的问题,请参考以下文章

定期后台获取

当应用程序移到后台时,在前台服务中获取位置更新不起作用

0x8badf00d 在后台获取监听位置后崩溃

定期获取位置并绘制标记以映射

定期更新通过 cURL 请求从 API 获取的地理位置数据

当应用程序从后台返回到前台时,CMDeviceMotion 停止更新