MIKE PERETZ
MIKE PERETZ

Reputation: 159

Android Multiple notifications BroadcastReceiver

I am trying to implement multiple notifications for each reminder I have in my app. I found some leads around here that it could be achieved using unique id per each notification but it is not working I get only one notification which is overwritten by the last one set. Also I would like know how is it possible to keep the notification intact after device is rebooted please. Here is my code

 //call notification activation Intent
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

AlarmReceiver class

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        //creating unique id for each specific notification
        int ID = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE);

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Intent notification = new Intent(context,MainActivity.class);
        notification.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        PendingIntent pi = PendingIntent.getActivity(context,0,notification,0);

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder mynotification = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_date_range_black_48dp)
                .setContentTitle("note taker")
                .setContentText("you have a reminder about a note")
                .setAutoCancel(true)
                .setContentIntent(pi)
                .setSound(defaultSoundUri)
                .setVibrate(new long[]{1000,1000,1000,1000,1000});

        notificationManager.notify(ID,mynotification.build());
    }
}

Upvotes: 2

Views: 1263

Answers (2)

Zam Sunk
Zam Sunk

Reputation: 146

I found some leads around here that it could be achieved using unique id per each notification but it is not working i get only one notification which is overwritten by the last one set

I think the problem lies not in your notification, but in your AlarmManager. Try using different ID for each PendingIntent, and set the flag to PendingIntent.FLAG_ONE_SHOT.

Your calling intent should look like this:

//call notification activation Intent
Intent intent = new Intent(getBaseContext(), AlarmReciever.class);
int RQS_1 = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Upvotes: 6

Muthukrishnan Rajendran
Muthukrishnan Rajendran

Reputation: 11622

Try to give different request code and PendingIntent.FLAG_UPDATE_CURRENT as Flag for Pending Intent and check like this,

PendingIntent pi = PendingIntent.getActivity(context, new Random().nextInt(1000000), notification, PendingIntent.FLAG_UPDATE_CURRENT);

Upvotes: 2

Related Questions