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

在Android Oreo中每分钟更新一个小部件,android,widget,Android,Widget,我有一个小部件,显示当前时间和一些其他信息,因此它必须每分钟更新一次。我使用的AlarmManager每分钟触发一次,并调用IntentService更新小部件。此解决方案在Oreo之前的Android版本中运行良好。在Oreo上,此解决方案不起作用-看起来AlarmManager没有启动。我已经读到,现在有一个TextClock控件可以自动将文本更新到当前时间,但不幸的是,这不是一个解决方案,因为我需要在小部件上绘制其他非文本信息 报警设置如下: if (android.os.Build.VE

我有一个小部件,显示当前时间和一些其他信息,因此它必须每分钟更新一次。我使用的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);
}
请注意,每次在android 19+上触发警报时,都会重新安排警报时间,因为它不是重复警报


是否有其他解决方案可用于Android O及更高版本?

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

如果要使用更复杂的视图(例如,绘制位图),则必须使用前台服务,该服务使用显式时间刻度接收器或处理程序来安排更新。
你必须显示前台通知,如果执行不当,可能会消耗大量电池…

你想要的在新版本的Android上并不实用,因为谷歌一直在努力提高电池寿命。由于用户的主屏幕(在状态栏中)上已经有了当前时间,因此最简单、最方便电池的方法是从应用程序小部件中去掉时间,然后更新该应用程序小部件的频率要低得多。我理解,但这已经起作用好几年了,没有报告或检测到电池问题。这是一个有很多用户的应用程序,他们使用小部件的主要原因是为了显示时间(时间以大文本显示,使用用户可以选择的不同字体)。这是否意味着Android O是时钟结束的小部件?“这是否意味着Android O是时钟结束的小部件?”--我不知道您将如何实现一个在Android 8.0+上每分钟更新一次的小部件。您好,您解决了这个问题吗?不幸的是,在Android O或更高版本中不可能做到这一点。您可以使用变通方法每分钟更新小部件(JobScheduler等),但一旦屏幕关闭,没有人可以保证小部件每分钟都会更新。