如何在广播接收器上处理针对多个通知的操作。例如,我对通知执行了取消操作,如果触发了两个或多个包含不同通知ID的不同通知,则在接收方,通知ID将更新为新ID,从而导致对先前通知不采取任何行动。
这是我的代码:
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(ChannelId,
"Notification",
NotificationManager.IMPORTANCE_HIGH);
assert notificationManager != null;
notificationManager.createNotificationChannel(channel);
}
//dismissAction
Intent dismiss = new Intent(context, DismissNotificationReceiver.class);
dismiss.setAction(ACTION_SNOOZE);
dismiss.putExtra(EXTRA_NOTIFICATION_ID, NotificationID);
PendingIntent dismissIntent = PendingIntent.getBroadcast(context, 0, dismiss, PendingIntent.FLAG_CANCEL_CURRENT);
Notification notificationBuilder =
new NotificationCompat.Builder(context, ChannelId)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(Title)
.setAutoCancel(true)
.addAction(R.mipmap.ic_launcher, "Dismiss", dismissIntent)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(message))
.build();
assert notificationManager != null;
notificationManager.notify(NotificationID, notificationBuilder);
收件人:
public class DismissNotificationReceiver extends BroadcastReceiver {
public static final String ACTION_SNOOZE = "OK";
public static final String EXTRA_NOTIFICATION_ID = "notification-id";
@Override
public void onReceive(Context context, Intent intent) {
if (Objects.equals(intent.getAction(), ACTION_SNOOZE)) {
int notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, 0);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
manager.cancel(notificationId);
}
}
}