Notification.Builder(上下文)已弃用的Android O

Notification.Builder(上下文)已弃用的Android O,android,android-notifications,android-8.0-oreo,Android,Android Notifications,Android 8.0 Oreo,Builder(context)最近已经被弃用,因为它的通知通道位于Android O中 问题: 在使用Notification.Builder(context,StringID)而不是Notification.Builder(context)之后,我确实收到了一个到我的Android O设备的通知。 然而,在安卓23(M)上试过之后,我没有收到通知。我调试了我的代码,当调试器在安卓23(M)上点击post Notification.Builder(context,StringID)一行时,它就

Builder(context)最近已经被弃用,因为它的通知通道位于Android O中

问题:

在使用
Notification.Builder(context,StringID)
而不是
Notification.Builder(context)
之后,我确实收到了一个到我的Android O设备的通知。
然而,在安卓23(M)上试过之后,我没有收到通知。我调试了我的代码,当调试器在安卓23(M)上点击post Notification.Builder(context,StringID)一行时,它就停止了执行

修复:

为了解决这个问题,我使用if/else条件在androido设备和其他设备之间进行隔离

我有以下代码片段:

Notification.Builder notificationBuilder;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    notificationBuilder = new Notification.Builder(mContext,
            mContext.getResources().getString(R.string.notification_id_channel));
} else {
    notificationBuilder = new Notification.Builder(mContext);
}
Android Studio中的Lint显示以下弃用行:

问题:


有没有办法摆脱那条反对的警戒线

我也遇到了同样的问题,因为我的目标是android 22和24,所以我就这么做了: NotificationCompat.Builder通知=新建NotificationCompat.Builder(MainActivity.this,“”)

我相信有人会说这是一个黑客,但它摆脱了警告,我没有问题

似乎传递一个空字符串对 也许其他人可以说明这是否会导致26人的问题


谢谢

您必须定义一个唯一的channelId(例如“MyChannelId_01”)并调用NotificationCompat.Builder(ctx,“MyChannelId_01”)。构建的通知将发布在此通知频道“MyChannelId_01”上

这允许您定义通知的重要性(这控制发布到此频道的中断通知的方式。值为重要性\未指定、重要性\无、重要性\最小、重要性\低、重要性\默认或重要性\高)


您可以在这里找到一个示例:

您的解决方案是使用
NotificationCompat.Builder(上下文,字符串channelId)
。如果使用此选项,则不必检查API级别,生成器将忽略pre-Oreo设备上的通道ID


我已经在API 15、22、23和26上对它进行了测试,它工作得非常好。

应该有一个快速修复程序(Alt-Enter,光标在弃用中)来向方法添加注释,以抑制弃用警告。或者,切换到
NotificationCompat.Builder
,尤其是当支持库的v26版本超出测试版时。只需切换到
NotificationCompat
否,NotificationCompat.Builder(上下文上下文)也已被API级别为O的人弃用。是的,它已被
NotificationCompat(上下文,字符串channelId)替换
。你有没有读过你发布的链接?我很确定是的,因为我用过它,而且很好用,所以你为什么不先尝试一下,而不是说它不起作用呢?NotificationCompat是专门为处理不同的操作系统版本而构建的这应该是正确的答案通道ID的值应该是什么?通道ID是您为在Oreo中创建的每个通知通道定义的唯一静态字符串。我只是将适当的通道ID传递给构建器,就好像我正在为Oreo构建通知一样。如果通知未发布在Oreo上(且相应的频道不存在),则构建器不关心您提供的频道ID,它会忽略它,因此这适用于所有API级别。您还需要注意支持版本的NotificationCompat将support.v7.app.NotificationCompat替换为support.v4.app.NotificationCompat,并且在传递channeId参数后,您将不再看到不推荐的检查。尽管您仍然需要检查API级别,用于根据API级别设置优先级或重要性。请不要忘记切换到英语!你救了我一天!