Failed to post notification on channel “null” Target Api is 26

前端 未结 8 762
盖世英雄少女心
盖世英雄少女心 2020-12-08 06:53

Two log showing

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

2: See the documentation of setSound() for what to use instea

相关标签:
8条回答
  • 2020-12-08 07:07

    Gulzar Bhat's answer is working perfectly if your minimum API is Oreo. If your minimum is lower however, you have to wrap the NotificationChannel code in a platform level check. After that you can still use the id, which will be ignored pre Oreo:

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_LOW;
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, importance);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.enableVibration(true);
        notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        notificationManager.createNotificationChannel(notificationChannel);
    }
    
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
    
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify((int)(System.currentTimeMillis()/1000), mBuilder.build());
    
    0 讨论(0)
  • 2020-12-08 07:09

    If you get this error should be paid attention to 2 items and them order:

    1. NotificationChannel mChannel = new NotificationChannel(id, name, importance);
    2. builder = new NotificationCompat.Builder(this, id);

    Also NotificationManager notifManager and NotificationChannel mChannel are created only once.

    There are required setters for Notification:

    builder.setContentTitle() // required  
           .setSmallIcon()    // required 
           .setContentText()  // required  
    

    See the example in On Android 8.1 API 27 notification does not display.

    0 讨论(0)
  • 2020-12-08 07:10

    From the developer documentation:

    When you target Android 8.0 (API level 26), you must implement one or more notification channels to display notifications to your users.

    int NOTIFICATION_ID = 234;
    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        String CHANNEL_ID = "my_channel_01";
        CharSequence name = "my_channel";
        String Description = "This is my channel";
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);
        mChannel.setDescription(Description);
        mChannel.enableLights(true);
        mChannel.setLightColor(Color.RED);
        mChannel.enableVibration(true);
        mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        mChannel.setShowBadge(false);
        notificationManager.createNotificationChannel(mChannel);
    }
    
    NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx, CHANNEL_ID)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle(title)
        .setContentText(message);
    
    Intent resultIntent = new Intent(ctx, MainActivity.class);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctx);
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(resultPendingIntent);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    

    One interesting thing to note: If a channel already exists, calling createNotificationChannel has no effect, so you can create all channels whenever you start your application.

    0 讨论(0)
  • 2020-12-08 07:11

    I had a similar problem but starting an service as a background activity, in the service this code worked:

    public static final int PRIMARY_FOREGROUND_NOTIF_SERVICE_ID = 1001;
    
    @Override
    public void onCreate() {
        super.onCreate();
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    
            String id = "_channel_01";
            int importance = NotificationManager.IMPORTANCE_LOW;
            NotificationChannel mChannel = new NotificationChannel(id, "notification", importance);
            mChannel.enableLights(true);
    
            Notification notification = new Notification.Builder(getApplicationContext(), id)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle("My chat")
                    .setContentText("Listening for incoming messages")
                    .build();
    
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            if (mNotificationManager != null) {
                mNotificationManager.createNotificationChannel(mChannel);
                mNotificationManager.notify(PRIMARY_FOREGROUND_NOTIF_SERVICE_ID, notification);
            }
    
            startForeground(PRIMARY_FOREGROUND_NOTIF_SERVICE_ID, notification);
        }
    }
    

    It's not the best solution but just to start the service in the background It does work

    0 讨论(0)
  • 2020-12-08 07:11
    String CHANNEL_ID = "my_channel";
    
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this,CHANNEL_ID);
    
    0 讨论(0)
  • 2020-12-08 07:17

    You can solve this in two ways but for both of them you need to create a notification channel with an specific channel id.

    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String id = "my_channel_01";
    int importance = NotificationManager.IMPORTANCE_LOW;
    NotificationChannel mChannel = new NotificationChannel(id, name,importance);
    mChannel.enableLights(true);
    mNotificationManager.createNotificationChannel(mChannel);
    

    First way is to set channel for notification in constructor:

    Notification notification = new Notification.Builder(MainActivity.this , id).setContentTitle("Title");
    mNotificationManager.notify("your_notification_id", notification);
    

    Second way is to set the channel by Notificiation.Builder.setChannelId()

    Notification notification = new Notification.Builder(MainActivity.this).setContentTitle("Title").
    setChannelId(id);
    mNotificationManager.notify("your_notification_id", notification);
    

    Hope this helps

    0 讨论(0)
提交回复
热议问题