4

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

我已经注册了一个接收器来监听PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED广播,然后调用PowerManager.isDeviceIdleMode(). 但是,这两种情况都返回 false - 在维护窗口期间和设备退出打盹模式时。我怎样才能区分它们?

4

1 回答 1

0

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

请记住,ACTION_DEVICE_IDLE_MODE_CHANGED 会在 9-10 分钟后再次打瞌睡时再次触发。

解决方案将是:

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

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

在下一个模式改变。

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

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

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

我认为这是一种 hack,而不是一个完整的解决方案。但它一直有效,直到将来在 android 上的任何扩展工作提供对 ACTION_DEVICE_IDLE_MODE_CHANGED 的另一个调用,并处于“打瞌睡”状态。

于 2017-08-30T07:19:16.320 回答