处理接收器上的多个通知

时间:2020-03-05 07:07:45

标签: java android

如何在广播接收器上处理针对多个通知的操作。例如,我对通知执行了取消操作,如果触发了两个或多个包含不同通知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);
    }

}

}

0 个答案:

没有答案