Failed to post notification on channel "null" Target Api is 26 Failed to post notification on channel "null" Target Api is 26 android android

Failed to post notification on channel "null" Target Api is 26


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.


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


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