【问题标题】:Notifications in Android OreoAndroid Oreo 中的通知
【发布时间】:2018-10-18 11:29:37
【问题描述】:

首先,我知道这个问题已经被问过好几次了,但是我还没有找到一个可行的解决方案,所以我还是想问一下。

在我的应用中,我使用AlarmManager 在特定时刻触发通知。它在 Nougat 及更低版本中运行良好,但在 Oreo 上测试时它永远不会触发(假设它也不适用于 Pie)。

我尝试了各种方法,例如使用setExactAndAllowWhileIdle。根据其他用户的说法,这应该适用于奥利奥,但它对我不起作用。我还发现了 WorkManager,但是人们建议不要在生产应用程序中使用它,因为它仍处于测试阶段,如果您需要在非常特定的时间运行任务,显然也不建议使用它。

我会展示我的代码,但它只是一个简单的AlarmManager 和BroadcastReceiver,就像您在互联网上可能找到的任何其他示例一样。

这对我来说是一个真正的应用程序破坏“错误”,此时我不知道该怎么办。谢谢。

编辑:AlarmManager 确实适用于 Android Oreo 及更高版本,问题出在通知上。从奥利奥开始,您需要设置NotificationChannel,否则通知将永远不会出现。就是这样。

【问题讨论】:

  • 这是在所有设备上发生还是特定于例如三星手机?
  • @shelll 我已经在我的华为手机和 AVD 中尝试过

标签: android alarmmanager android-notifications android-8.0-oreo android-workmanager


【解决方案1】:

关键是你必须在奥利奥的情况下使用显式广播。

Discussion with solution.

Documentation.

【讨论】:

  • 谢谢,不过我已经在处理明确的广播了。我的问题的答案在您提供的链接中。问题出在通知而不是 AlarmManager。
【解决方案2】:

试试这个,它可能会奏效。我也遇到了和你一样的问题,这段代码对我来说很好。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
    alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(d.getTime(), pendingIntent), pendingIntent);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    alarmManager.setExact(AlarmManager.RTC, d.getTime(), pendingIntent);
else
    alarmManager.set(AlarmManager.RTC, d.getTime(), pendingIntent);

setAlarmClock() 方法适用于大多数情况。即使设备在Doze Mode,这个方法也可以。

您可以从here了解更多关于setAlarmClock()方法的信息。

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2018-01-05
    相关资源
    最近更新 更多