有人知道持有部分唤醒锁定的白名单应用是否可以在设备处于打盹或应用处于待机状态时接收位置更新?
Android文档(http://developer.android.com/training/monitoring-device-state/doze-standby.html)仅声明CPU和网络延迟,并且未提及对位置更新的任何影响(即来自LocationManager)。基于此,似乎位置更新不受Doze / Standby的影响,因此如果应用程序持有部分唤醒锁定(以保持CPU运行),则应用程序应该能够接收位置更新。
我已经实现了这一点并对其进行了测试,发现应用程序似乎没有在Doze中接收位置更新,即使它具有部分唤醒锁定并列入白名单。有趣的是,当我将设备放在我的办公桌上,一夜之间运行带有唤醒锁定的应用程序时,早上电池几乎是空的,但是当重复使用不带唤醒锁定的应用程序时,电池在早上几乎已满。所以看起来该应用程序一直在运行,但没有收到位置更新。
一些额外的背景:该应用程序用于车队跟踪,因此我们正在尝试确定应用程序是否有运行后台服务,以便在使用电池供电时可靠地接收位置更新。
谢谢! -Tom B.
答案 0 :(得分:3)
是的,这似乎是Doze模式中的另一个未记录的限制,正如我的test logs也显示的那样。我的猜测是,一些硬件功能(如GPS)通常在Doze中关闭,但可能是因为它完全禁用了LocationManager。
由于这可能只是一个严重缺乏文档,你提到的电池耗尽绝对不应该在Doze中发生,因为这正是Doze首先要防止的。
上提交有关所有这些内容的错误报告答案 1 :(得分:2)
要在手机处于空闲模式时获取位置更新,应将应用列入白名单,进行部分唤醒锁定,也不应位于相同的位置(如果您位于同一位置,则不需要更新)。我用Mock Locations进行了测试,当我的桌面上有电话时,它给出了假位置。
答案 2 :(得分:1)
根据我的经验,在Doze中仍然会收到位置更新,但仅当您将前景通知与您描述的方法一起使用时才会收到。网络呼叫不起作用。
请注意一些stackoverflow帖子,表明只使用权限REQUEST_IGNORE_BATTERY_OPTIMIZATIONS。由于“设备和网络滥用”https://play.google.com/about/privacy-security/device-network-abuse/,当您在清单中定义此权限时,您的应用将被拒绝从Play商店中删除。
还有一种方法可以通过意图手动请求此权限。我不知道是否也是这样禁止的。整个白名单原则对我来说有点模糊。