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

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

问题描述

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

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

不推荐将流类型用于除volume 之外的操作控制

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 中指定的设置.我知道,这是违反直觉的.您应该将要更改的设置移动到通知中,或者为每个配置使用不同的 NotificationChannel.
  2. 在将NotificationChannel 设置传递给createNotificationChannel() 之后,您将无法修改大部分设置.您甚至无法调用 deleteNotificationChannel() 然后尝试重新添加它.使用已删除的 NotificationChannel 的 ID 将使其复活,并且与首次创建时一样不可变.在卸载应用程序之前,它将继续使用旧设置.因此,您最好确定您的频道设置,并在您使用这些设置时重新安装应用程序,以使它们生效.
  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天全站免登陆