【问题标题】:Notification.Builder(context) deprecated Android O [duplicate]Notification.Builder(context) 已弃用 Android O [重复]
【发布时间】:2017-06-23 19:17:34
【问题描述】:

Notification.Builder(context) 最近在 Android O 中的 Notification Channels 位置已被弃用。

问题:

在使用 Notification.Builder(context, StringID) 而不是 Notification.Builder(context)后,我确实收到了我的 Android O 设备的通知。
但是,在 Android 23 (M) 上尝试之后,我没有收到通知。我调试了我的代码,一旦调试器在 Android 23 (M) 上发布 Notification.Builder(context, StringID) 行,它就会停止执行。

修复:

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

我有以下代码sn-p:

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 显示以下弃用行:

问题:

有没有办法摆脱弃用警告线?

【问题讨论】:

  • 应该有一个快速修复(Alt-Enter 与光标在弃用中)为抑制弃用警告的方法添加注释。或者,切换到NotificationCompat.Builder,特别是当支持库的 v26 版本已结束测试时。
  • 切换到NotificationCompat
  • 否,NotificationCompat.Builder(Context context) 也已被 API 级别 O 弃用。developer.android.com/reference/android/app/…
  • 是的,它已被 NotificationCompat(Context context, String channelId) 取代。您甚至阅读过您发布的链接吗?
  • 我很确定它确实可以,因为我使用它并且它工作正常,所以你为什么不先尝试一下而不是说它不起作用? NotificationCompat 专门用于处理不同的操作系统版本

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


【解决方案1】:

您的解决方案是使用NotificationCompat.Builder(Context context, String channelId)。如果您使用它,则无需检查 API 级别,生成器会忽略 pre-Oreo 设备上的通道 ID。

我已经在 API 15、22、23 和 26 上对其进行了测试,并且运行良好。

【讨论】:

  • 这应该是正确的答案
  • channel ID 的值应该是多少?
  • 频道 ID 是您为在 Oreo 中创建的每个通知频道定义的唯一静态字符串。我只是将适当的频道 ID 传递给构建器,就好像我正在为 Oreo 构建通知一样。如果通知未在 Oreo 上发布(并且相应的频道不存在),则构建器不关心您提供的频道 ID,它会忽略它,因此这适用于所有 API 级别。
  • 您还需要注意支持版本的 NotificationCompat 将 support.v7.app.NotificationCompat 替换为 support.v4.app.NotificationCompat 并且通过 channeId 参数后,您将不再看到不推荐使用的检查。
  • 虽然您仍然需要检查 API 级别,以根据 API 级别设置优先级或重要性。
【解决方案2】:

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

这允许您定义通知的重要性(这控制发布到此频道的中断通知的程度。值是 IMPORTANCE_UNSPECIFIED、IMPORTANCE_NONE、IMPORTANCE_MIN、IMPORTANCE_LOW、IMPORTANCE_DEFAULT 或 IMPORTANCE_HIGH)。

你可以在这里找到一个例子:Creating a notification channel

【讨论】:

  • 别忘了切换到英文!
【解决方案3】:

我遇到了同样的问题,因为我的目标是 android 22 和 24,所以我这样做了: NotificationCompat.Builder 通知 = new NotificationCompat.Builder(MainActivity.this, "")

我相信有人会说这是一个 hack,但它消除了警告,我没有任何问题。

似乎传递一个空字符串适用于

也许其他人可以说明这是否会导致 26 岁的问题。

谢谢

【讨论】:

  • 你拯救了我的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 2020-04-20
  • 2018-01-03
  • 2014-10-27
  • 2020-09-23
  • 2014-03-14
相关资源
最近更新 更多