Android Oreo 中的通知

Notifications in Android Oreo

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

在我的应用程序中,我使用 AlarmManager 在特定时刻触发通知。它在 Nougat 和更低版本中工作正常,但是在 Oreo 上测试时它永远不会触发(并且假设它也不会在 Pie 上工作)。

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

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

这对我来说是一个真正的应用程序中断 "bug",此时我不知道该怎么做。谢谢。

编辑AlarmManager 在Android Oreo 及更高版本中确实有效,问题出在通知上。从 Oreo 开始,您需要设置一个 NotificationChannel,否则通知永远不会显示。就是这样。

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

.

Documentation.

试试这个,它可能会起作用。我也遇到了和你一样的问题,这段代码对我来说工作正常。

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() 方法的信息