android 报警管理器的多个通知
android multiple notifications with alarm manager
我有这个代码可以通过警报管理器设置多个通知:
接收器
public class NotificationPublisher extends BroadcastReceiver {
public static String NOTIFICATION_ID = "notification-id";
public static String NOTIFICATION = "notification";
public void onReceive(Context context, Intent intent) {
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
notificationManager.notify(intent.getIntExtra(NOTIFICATION_ID, 0), notification);
}
}
主要
private void scheduleNotification(Notification notification, int delay) {
Intent notificationIntent = new Intent(this, NotificationPublisher.class);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, (int)System.currentTimeMillis());
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long futureInMillis = System.currentTimeMillis() + delay;
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, futureInMillis, pendingIntent);
}
private Notification getNotification(String content) {
Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("Scheduled Notification");
builder.setContentText(content);
builder.setSmallIcon(R.drawable.ic_notification_appicon);
builder.setDefaults(Notification.DEFAULT_SOUND);
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
return builder.getNotification();
}
在创建时我输入了这段代码:
scheduleNotification(getNotification("3 second delay"), 3000);
scheduleNotification(getNotification("5 second delay"), 5000);
两个通知都会显示,但同时显示(5 秒后)我的错误在哪里?
你必须改变这一行
notificationManager.notify(intent.getIntExtra(NOTIFICATION_ID, 0), notification);
替换为这个
notificationManager.notify(Unique_Integer_Number, notification);
唯一整数意味着您必须设置永远不会重复的整数值。例如 0,1,2,3,4,5,....!!!!
好的,我找到了解决方案!
我改变了:
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT)
至
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_ONE_SHOT);
我有这个代码可以通过警报管理器设置多个通知:
接收器
public class NotificationPublisher extends BroadcastReceiver {
public static String NOTIFICATION_ID = "notification-id";
public static String NOTIFICATION = "notification";
public void onReceive(Context context, Intent intent) {
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = intent.getParcelableExtra(NOTIFICATION);
notificationManager.notify(intent.getIntExtra(NOTIFICATION_ID, 0), notification);
}
}
主要
private void scheduleNotification(Notification notification, int delay) {
Intent notificationIntent = new Intent(this, NotificationPublisher.class);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, (int)System.currentTimeMillis());
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long futureInMillis = System.currentTimeMillis() + delay;
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, futureInMillis, pendingIntent);
}
private Notification getNotification(String content) {
Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("Scheduled Notification");
builder.setContentText(content);
builder.setSmallIcon(R.drawable.ic_notification_appicon);
builder.setDefaults(Notification.DEFAULT_SOUND);
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
return builder.getNotification();
}
在创建时我输入了这段代码:
scheduleNotification(getNotification("3 second delay"), 3000);
scheduleNotification(getNotification("5 second delay"), 5000);
两个通知都会显示,但同时显示(5 秒后)我的错误在哪里?
你必须改变这一行
notificationManager.notify(intent.getIntExtra(NOTIFICATION_ID, 0), notification);
替换为这个
notificationManager.notify(Unique_Integer_Number, notification);
唯一整数意味着您必须设置永远不会重复的整数值。例如 0,1,2,3,4,5,....!!!!
好的,我找到了解决方案!
我改变了:
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT)
至
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, (int)System.currentTimeMillis(), notificationIntent, PendingIntent.FLAG_ONE_SHOT);