通知无法在Android Oreo(API 26)中显示 [英] Notifications fail to display in Android Oreo (API 26)

查看:339
本文介绍了通知无法在Android Oreo(API 26)中显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在Android O上显示通知时收到此消息。

I get this message when trying to display a notification on Android O.


不建议将流类型用于卷以外的其他操作
控件

Use of stream types is deprecated for operations other than volume control

该通知直接来自示例文档,并在Android 25上正常显示。

The notification is straight from the example docs, and displays fine on Android 25.

推荐答案

从Android O开始,您需要配置 NotificationChannel ,并在您尝试显示通知时引用该频道。

Starting with Android O, you are required to configure a NotificationChannel, and reference that channel when you attempt to display a notification.

private static final int NOTIFICATION_ID = 1;
private static final String NOTIFICATION_CHANNEL_ID = "my_notification_channel";

...

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "My Notifications", NotificationManager.IMPORTANCE_DEFAULT);

  // Configure the notification channel.
  notificationChannel.setDescription("Channel description");
  notificationChannel.enableLights(true);
  notificationChannel.setLightColor(Color.RED);
  notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
  notificationChannel.enableVibration(true);
  notificationManager.createNotificationChannel(notificationChannel);
}

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
  .setVibrate(new long[]{0, 100, 100, 100, 100, 100})
  .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
  .setSmallIcon(R.mipmap.ic_launcher)
  .setContentTitle("Content Title")
  .setContentText("Content Text");

  notificationManager.notify(NOTIFICATION_ID, builder.build());

几个重要说明:


  1. NotificationChannel 中指定的设置(例如振动模式)会覆盖在实际的 Notification 中指定的设置。我知道,这违反直觉。您应该将将更改更改为Notification的设置,或者为每个配置使用不同的NotificationChannel。

  2. 您不能修改大多数 NotificationChannel 设置传递给 createNotificationChannel()之后。您甚至无法调用 deleteNotificationChannel()然后尝试重新添加它。使用已删除的 NotificationChannel 的I​​D可以恢复它,并且它与第一次创建时一样是不变的。在卸载应用程序之前,它将继续使用旧设置。因此,您最好确定自己的频道设置,如果正在使用这些设置,请重新安装该应用程序,以使它们生效。

  1. Settings such as vibration pattern specified in the NotificationChannel override those specified in the actual Notification. I know, its counter-intuitive. You should either move settings that will change into the Notification, or use a different NotificationChannel for each configuration.
  2. You cannot modify most of the NotificationChannel settings after you've passed it to createNotificationChannel(). You can't even call deleteNotificationChannel() and then try to re-add it. Using the ID of a deleted NotificationChannel will resurrect it, and it will be just as immutable as when it was first created. It will continue to use the old settings until the app is uninstalled. So you had better be sure about your channel settings, and reinstall the app if you are playing around with those settings in order for them to take effect.

这篇关于通知无法在Android Oreo(API 26)中显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆