【发布时间】:2018-05-18 09:35:44
【问题描述】:
我有一个显示当前时间和其他信息的小部件,因此它必须每分钟更新一次。我正在使用每分钟触发一次并调用更新小部件的 IntentService 的 AlarmManager。此解决方案在 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 及更高版本中运行?
【问题讨论】:
-
您想要的在较新版本的 Android 上并不实用,因为 Google 会继续尝试延长电池寿命。由于用户已经在他们的主屏幕上(在状态栏中)显示了当前时间,因此最简单且最省电的方法是从您的应用小部件中删除时间,然后大大降低更新该应用小部件的频率。
-
我明白,但这已经工作了好几年,没有报告或检测到电池问题。这是一个有很多用户的应用程序,他们使用小部件的主要原因是显示时间(时间以大文本显示,用户可以选择不同的字体)。这是否意味着 Android O 是时钟小部件的终结?
-
“这是否意味着 Android O 是时钟小部件的终结?” -- 我不知道你将如何在 Android 8.0+ 上实现每分钟更新一次。
-
嗨,你解决了这个问题吗?
-
不幸的是,在 Android O 或更高版本中无法执行此操作。您可以使用变通方法每分钟更新一次小部件(JobScheduler 等),但是一旦屏幕关闭,没有人可以保证小部件每分钟更新一次。