打盹/待机功能如何影响位置更新?

Posted

技术标签:

【中文标题】打盹/待机功能如何影响位置更新?【英文标题】:How does Doze/Standby feature affect location updates? 【发布时间】:2016-01-24 01:45:52 【问题描述】:

有谁知道当设备处于打盹或应用处于待机状态时,持有部分唤醒锁定的列入白名单的应用是否可以接收位置更新?

android 文档 (http://developer.android.com/training/monitoring-device-state/doze-standby.html) 仅声明 CPU 和网络已延迟,并未提及对位置更新的任何影响(即来自 LocationManager)。基于此,位置更新似乎不受 Doze/Standby 的影响,因此如果应用程序持有部分唤醒锁定(以保持 CPU 运行),那么该应用程序应该能够接收位置更新。

我已经实现并对其进行了测试,发现应用在 Doze 中似乎没有接收到位置更新,即使它具有部分唤醒锁定并被列入白名单。有趣的是,当我将设备放在办公桌上一夜之间运行带有唤醒锁的应用程序时,早上电池几乎没电了,但是当我在没有唤醒锁的情况下重复使用应用程序时,早上电池几乎是满的。所以看起来该应用程序一直在运行,但没有接收到位置更新。

一些额外的背景:该应用用于车队跟踪,因此我们正在尝试确定是否有任何应用可以运行后台服务,以便在使用电池供电时可靠地接收位置更新。

谢谢! -汤姆 B.

【问题讨论】:

请查看this answer。 您是如何申请列入白名单的? 遇到同样的问题,服务确实在运行,位置(甚至最后一个已知)不起作用 【参考方案1】:

是的,这似乎是打盹模式下的另一个未记录的限制,正如我的test logs 也显示的那样。我的猜测是 GPS 等一些硬件功能在 Doze 中通常是关闭的,但可能是 LocationManager 被完全禁用了。

由于这可能只是严重缺乏文档,因此您提到的电池消耗绝对不应该在 Doze 中发生,因为这正是 Doze 首先要防止的意思。

你可能想在https://code.google.com/p/android/issues/list提交一份关于这一切的错误报告

【讨论】:

【参考方案2】:

为了在手机处于空闲模式时获取位置更新,应用应该被列入白名单,具有部分唤醒锁定,并且不应该在同一个位置(如果你在同一个位置,你不需要更新)。我使用 Mock Locations 对此进行了测试,当手机放在我的桌子上时,它会提供虚假的位置。

【讨论】:

“模拟位置”应用程序是否在打盹模式下工作?我的意思是,正如您所说,设备应该位于不同的位置,以便位置更新触发。因此,对于模拟位置,您需要一个像“模拟位置”这样可以更改设备位置的应用程序,但该应用程序也必须在打盹模式下工作 不,它在打盹模式下不起作用。对于在打瞌睡模式下工作的应用程序应该显示对话框,要求您将其放在白名单中,并且“模拟位置”不会要求您这样做。【参考方案3】:

根据我的经验,在打瞌睡时仍会收到位置更新,但只有在您使用前台通知和您描述的方法时才会收到位置更新。网络通话不起作用。

注意一些 *** 帖子表明只使用 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限。由于“设备和网络滥用”https://play.google.com/about/privacy-security/device-network-abuse/,当您在清单中定义此权限时,您的应用将被 Play 商店拒绝。

还有一种方法可以通过意图手动请求此权限。不知道是不是也被禁止了。整个白名单原则对我来说有点模糊。

【讨论】:

在 Android 8 Samsung 设备的打盹模式下,我没有收到任何位置更新。前台服务没有帮助我使用这个例子github.com/xamarin/monodroid-samples/tree/master/android-o/…

以上是关于打盹/待机功能如何影响位置更新?的主要内容,如果未能解决你的问题,请参考以下文章

打盹模式停止了定位服务

在不将应用列入白名单的情况下避免打盹模式

是否可以在打盹模式或应用待机期间运行 Android 定期和一次性工作人员?

如何在 Android 上测试打盹模式?

与设备一起移动时,Android 不会退出打盹模式

即使在打盹模式下也每 15 秒获取一次位置