Android Oreo 中的通知
Notifications in Android Oreo
首先,我知道这个问题已经被问过好几次了,但是我还没有找到可行的解决方案,所以我还是想问问。
在我的应用程序中,我使用 AlarmManager
在特定时刻触发通知。它在 Nougat 和更低版本中工作正常,但是在 Oreo 上测试时它永远不会触发(并且假设它也不会在 Pie 上工作)。
我尝试过各种方法,比如使用 setExactAndAllowWhileIdle
。根据其他用户的说法,这应该适用于奥利奥,但它对我不起作用。我还发现了 WorkManager,但是人们建议不要在生产应用程序中使用它,因为它仍处于测试阶段,而且如果您需要在特定时间 运行 执行任务,显然也不推荐使用它。
我会展示我的代码,但它只是一个带有 BroadcastReceiver
的简单 AlarmManager
,就像您可能在 Internet 上找到的任何其他示例一样。
这对我来说是一个真正的应用程序中断 "bug",此时我不知道该怎么做。谢谢。
编辑:AlarmManager
在Android Oreo 及更高版本中确实有效,问题出在通知上。从 Oreo 开始,您需要设置一个 NotificationChannel
,否则通知永远不会显示。就是这样。
关键是你必须在 Oreo 的情况下使用显式广播。
.
试试这个,它可能会起作用。我也遇到了和你一样的问题,这段代码对我来说工作正常。
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()
方法的信息
首先,我知道这个问题已经被问过好几次了,但是我还没有找到可行的解决方案,所以我还是想问问。
在我的应用程序中,我使用 AlarmManager
在特定时刻触发通知。它在 Nougat 和更低版本中工作正常,但是在 Oreo 上测试时它永远不会触发(并且假设它也不会在 Pie 上工作)。
我尝试过各种方法,比如使用 setExactAndAllowWhileIdle
。根据其他用户的说法,这应该适用于奥利奥,但它对我不起作用。我还发现了 WorkManager,但是人们建议不要在生产应用程序中使用它,因为它仍处于测试阶段,而且如果您需要在特定时间 运行 执行任务,显然也不推荐使用它。
我会展示我的代码,但它只是一个带有 BroadcastReceiver
的简单 AlarmManager
,就像您可能在 Internet 上找到的任何其他示例一样。
这对我来说是一个真正的应用程序中断 "bug",此时我不知道该怎么做。谢谢。
编辑:AlarmManager
在Android Oreo 及更高版本中确实有效,问题出在通知上。从 Oreo 开始,您需要设置一个 NotificationChannel
,否则通知永远不会显示。就是这样。
关键是你必须在 Oreo 的情况下使用显式广播。
试试这个,它可能会起作用。我也遇到了和你一样的问题,这段代码对我来说工作正常。
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()
方法的信息