Notification manager is not showing notifications

Viewed 180

I'm building a reminder application. For that, I need to show a notification when the alarm manager is triggered. I've implemented it a little bit. The alarm is working but it isn't showing any notification.

package com.aakash.assignmentone;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Build;
import android.widget.Toast;

import androidx.core.app.NotificationCompat;
public class broadcastForReminder extends BroadcastReceiver {
    static MediaPlayer mp;
    static final String chID = "Reminder";
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg = intent.getStringExtra("rMsg");
        if(intent.getStringExtra("rMsg") != null && intent.getStringExtra("rMsg").equals(msg)){
            NotificationManager notMan = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                String name = "REMINDER NOTIFICATION";
                String description = "Notification channel for notifying while reminder beeps.";
                int importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel channel = new NotificationChannel(chID, name, importance);
                channel.setDescription(description);
                notMan.createNotificationChannel(channel);
            }
            NotificationManager manager =
                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

            NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);
            Intent i = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_ONE_SHOT);
            builder.setContentIntent(pendingIntent);
            manager.notify(1, builder.build());
        }
        mp = MediaPlayer.create(context, R.raw.alarm_beep);
        mp.start();
    }
}

Update

The only thing I missed was to pass the channel ID while initializing the notification builder.

Instead of

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);

The working solution is

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, chID)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);
2 Answers

Instead of this

         manager.notify(1, builder.build());

Try this:

         manager.notify(getResources().getInteger(R.id.yourNotificationid),builder.build());

While initializing the notification builder, now the notification channel is a must. Hence in the above question, I forgot to specify the ID of my Notification Channel while initializing the notification builder.

The correct sequence is

Builder(Context context, String channelId)

Hence the correction is

            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, chID)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);
Related