【问题标题】:Android: pause Widget updates using AlarmmanagerAndroid:使用 Alarmmanager 暂停小部件更新
【发布时间】:2011-11-16 13:12:54
【问题描述】:
我刚刚完成了这个教程:
update-widget-in-onreceive-method
(顺便说一句:您会建议对该代码进行任何改进吗?)
最后有人提到:
我只是想知道是否有办法进一步扩展它,以便当设备处于睡眠状态(屏幕关闭)时,更新停止。然后,当设备唤醒时,更新将继续。
所以我的问题是:有没有办法做到这一点?如何?
还是警报管理器自动停止? - 我不这么认为。
【问题讨论】:
标签:
android
android-widget
alarmmanager
【解决方案1】:
您可以指定设备在安排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);
【讨论】:
-
这有点误导。即使您使用 ELAPSED_REALTIME,警报也可能会在屏幕处于睡眠状态时触发,如 this thread 中所述。