Notifications fail to display in Android Oreo (API 26)

前端 未结 4 834
[愿得一人]
[愿得一人] 2020-11-30 05:32

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

4条回答
  •  死守一世寂寞
    2020-11-30 06:00

    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());
    

    A couple of important notes:

    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.

提交回复
热议问题