在Android Oreo中每分钟更新一个小部件

a.p*_*.p. 5 android widget

我有一个小部件,显示当前时间和一些其他信息,因此它必须每分钟更新一次.我正在使用每分钟触发的AlarmManager并调用更新小部件的IntentService.此解决方案在Oreo之前的Android版本中运行良好.在Oreo上,这个解决方案不起作用 - 看起来AlarmManager没有触发.我已经读过现在有一个TextClock控件可以自动将文本更新为当前时间,但不幸的是,这不是一个解决方案,因为我需要在窗口小部件上绘制其他非文本信息.

警报设置如下:

if (android.os.Build.VERSION.SDK_INT >= 19) {
    alarmManager.setExact(AlarmManager.RTC, timeInMillis(), intent);

} else {
    alarmManager.setRepeating(AlarmManager.RTC, timeInMillis(), 1000 * 60, intent);
}
Run Code Online (Sandbox Code Playgroud)

请注意,每次在Android 19+上触发警报时都会重新安排警报,因为它不是重复警报.

是否有替代解决方案可以在Android O及更高版本中使用?

met*_*e38 0

如果您使用简单的 TextView 来显示时钟,请使用 TextClock 而不是 TextView(在 API 级别 17 中添加)

如果您使用更复杂的视图(例如绘制位图),则必须使用前台服务,该服务使用显式的 TIME_TICK 接收器或处理程序来安排更新。您必须显示前台通知,如果实施不当,可能会耗尽大量电池......