【问题标题】:Updating a widget every minute in Android Oreo在 Android Oreo 中每分钟更新一个小部件
【发布时间】: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 等),但是一旦屏幕关闭,没有人可以保证小部件每分钟更新一次。

标签: android widget


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多