21

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

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

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

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

谢谢!——汤姆·B。

4

3 回答 3

4

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

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

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

于 2015-10-28T21:25:55.670 回答
2

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

于 2017-01-03T18:43:32.563 回答
1

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

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

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

于 2016-06-21T19:43:25.537 回答