在安卓Oreo中每分钟更新小部件

5
我有一个控件可以显示当前时间和其他一些信息,因此它需要每分钟更新一次。我正在使用AlarmManager来触发每分钟的更新,并调用IntentService来更新小部件。在Android Oreo之前的版本中,这个解决方案运行良好。但在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 及更高版本中是否有替代解决方案?


1
您想要的在较新版本的Android上并不实用,因为谷歌继续努力改善电池寿命。由于用户已经在主屏幕上(状态栏中)看到了当前时间,最简单和最省电的方法是从您的应用程序小部件中删除时间,然后更少地更新该应用程序小部件。 - CommonsWare
1
这是否意味着Android O是时钟小部件的终结?我不知道如何在Android 8.0+上实现每分钟更新的小部件。 - CommonsWare
为什么不加入我们...我们仍然热爱小部件... - stuckedoverflow
我看到有人使用JobIntentService使其正常工作。也许你可以尝试一下! - stuckedoverflow
我们已经尝试过了,但不幸的是你不能依赖它每分钟都被执行;大多数情况下它可以工作,但有时候不行。 - a.p.
显示剩余3条评论
1个回答

0

如果您使用简单的TextView来显示时钟,请改用TextClock(在API Level 17中添加)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接