我刚刚完成了本教程: update-widget-in-onreceive-method (顺便说一下:你会对该代码提出任何改进吗?)
最后有人提到:
我只是想知道是否有办法进一步扩展这一点,以便当设备处于睡眠状态(屏幕关闭)时,更新会停止。然后,当设备唤醒时,更新将恢复。
所以我的问题是:有办法做到这一点吗?怎么样? 或警报管理器是否自动停止? - 我不这么认为。
答案 0 :(得分:2)
您可以指定在安排AlarmManager时是否会唤醒设备。
来自文档的引用:
ELAPSED_REALTIME
SystemClock.elapsedRealtime()中的闹钟时间(时间 自启动,包括睡眠)。 此警报不会唤醒设备;如果它在设备处于睡眠状态时熄灭,则在下次设备唤醒时才会发送。ELAPSED_REALTIME_WAKEUP
报警时间 SystemClock.elapsedRealtime()(自启动以来的时间,包括睡眠), 会在设备关机时唤醒设备。
同样适用于AlarmManager.RTC
和AlarmManager.RTC_WAKEUP
所以你可能想要两个AlarmManager.RTC
或AlarmManager.ELAPSED_REALTIME
中的一个。当设备处于唤醒状态时,它们会继续运行,并在设备处于待机状态时停止。如果在设备处于睡眠状态时触发此警报,则会在用户重新打开设备时将其发送,这正是您想要的。不,一般情况下,AlarmManagers预定的警报不会自动取消。
此处提到的部分可以在this part of the tutorial中找到,具体到此行:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 20*1000, pendingIntent);