2017-08-06 77 views
1

我想为我的应用程序中的每个提醒实现多个通知。我在这里发现了一些线索,可以通过每个通知使用唯一的ID来实现,但它不起作用,我只得到一个通知被最后一个通知覆盖。另外我想知道如何在设备重启后保持通知完好无损。这里是我的代码Android多个通知BroadcastReceiver

//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类

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

回答

1

我发现了一些在这里引导,它可以实现每个通知使用唯一的ID,但它不工作,我只有一个通知是由最后一个覆盖设置

我认为问题不在于你的通知,但在你的AlarmManager。 尝试使用不同的ID为每个PendingIntent,并将标志设置为PendingIntent.FLAG_ONE_SHOT

你调用的意图应该是这样的:

//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); 
1

尽量给不同的请求码和PendingIntent.FLAG_UPDATE_CURRENT作为标志未决意向,并检查这个样子,

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

恐怕是行不通的 –