这个问题可能是因为在使用AlarmManager设置通知时,没有给每个通知指定唯一的ID。因此,在调度多个通知时,AlarmManager只会保留最后一个通知并在其到期时发送。
为避免这种情况发生,在为每个通知设置唯一的ID时,可以使用getCurrentTimeMillis()方法生成唯一的ID。以下是一个示例:
private int generateNotificationId() {
return (int) System.currentTimeMillis();
}
private void scheduleNotification(Notification notification, long delay) {
Intent notificationIntent = new Intent(this, NotificationPublisher.class);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, generateNotificationId());
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long futureInMillis = SystemClock.elapsedRealtime() + delay;
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
}
在该示例中,generateNotificationId()方法使用System.currentTimeMillis()生成唯一的通知ID。 createNotification()方法在调度通知时将此ID传递给“notificationIntent”。这样,即使用户在等待通知到期之前安排了多个通知,AlarmManager也能够识别每个通知并在其到期时发送。