如何区分设备进入 Doze 维护时段和退出 Doze 维护时段

rha*_*ari 5 android android-6.0-marshmallow android-doze

我有一个定期运行以保持网络连接活动的方法。在打瞌睡模式期间,我想禁止它定期运行,并在维护窗口期间只运行一次。当设备退出打瞌睡状态时,我希望再次定期调用该方法。我怎样才能做到这一点?

我已经注册了一个接收器,用于监听PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED广播然后调用PowerManager.isDeviceIdleMode()。但是,这两种情况都会返回 false - 在维护时段期间和设备退出 Doze 模式时。我如何区分它们?

小智 0

我遇到了同样的问题,虽然我认为android必须通过在接收器中发送不同的状态来区分这个问题,或者提供一个函数来询问这样的状态,但我没有找到任何相关的东西。

请记住,9-10 分钟后返回瞌睡状态时,ACTION_DEVICE_IDLE_MODE_CHANGED 会再次触发。

解决方案将是:

当前设备状态 ->“打瞌睡空闲状态”

当您收到 ACTION_DEVICE_IDLE_MODE_CHANGED 并且 isDeviceIdleMode() 为 false 时,您的状态为“出于瞌睡怀疑” - 请执行您的维护窗口工作并设置未来 15 分钟的警报。

下一次模式更改时。

如果 ACTION_DEVICE_IDLE_MODE_CHANGED 在警报之前触发并且 isDeviceIdleMode() 为 true,那么这是一个维护窗口。“打瞌睡假”,(关闭闹钟)。

如果警报先被触发,这意味着它是“确认未打瞌睡” - 在警报中设置“未打瞌睡”

打瞌睡的时间在文档中。请务必先检查一下。(将来可能会改变,就像已经发生的那样*可能有一个常量来获取该值——我不知道)。

我认为这是一个黑客而不是一个完整的解决方案。但它会一直工作,直到 Android 上的任何未来扩展工作提供对 ACTION_DEVICE_IDLE_MODE_CHANGED 的另一个调用,并具有“打瞌睡”状态。