Отклонить текущее уведомление о действии

У меня есть пользовательское уведомление с кнопкой действия:

public class NotificationReceiver extends com.parse.ParsePushBroadcastReceiver { @Override public void onPushReceive(Context context, Intent intent) { ... NotificationActivity notification = new NotificationActivity(); notification.createNotification(context, message, notificationId); Log.i("tag", "Notification Received!"); } 

 public class NotificationActivity { public int notificationId; public void createNotification(Context context, String message, String studentId, String notificationId){ this.notificationId = Integer.parseInt(notificationId); // manager NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); // notification Notification.Builder mBuilder = new Notification.Builder(context); mBuilder.setContentTitle("My Title"); mBuilder.setContentText(message); mBuilder.setDefaults(Notification.DEFAULT_VIBRATE); mBuilder.setAutoCancel(true); mBuilder.setStyle(new Notification.BigTextStyle() .bigText(message)); // cancel intent Intent cancelIntent = new Intent(context, CancelNotification.class); Bundle extras = new Bundle(); extras.putInt("notification_id", this.notificationId); cancelIntent.putExtras(extras); PendingIntent pendingCancelIntent = PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ; mBuilder.addAction(R.drawable.notification_close, "Fechar", pendingCancelIntent); // notify Notification notification = mBuilder.build(); notificationManager.notify(Integer.parseInt(notificationId), notification); } public static class CancelNotification extends BroadcastReceiver { private int id; @Override public void onReceive(Context context, Intent intent) { id = intent.getIntExtra("notification_id", 1); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(id); } } } 

Я хочу отменить уведомление, которое я нажал на кнопку «Закрыть».

Я знаю, что мне нужен идентификатор уведомления, чтобы отменить его, но так, как я сделал код, когда я нажимаю кнопку «Закрыть» и создаю класс CancelNotification, который расширяет BroadCastReceiver. Я получаю идентификатор уведомления последнего уведомления, И, таким образом, закрывает последнее уведомление, даже если я нажимаю на первое уведомление, которое я создал.

Что я могу делать неправильно?

я нашел это

Вы pendingIntent всегда отправляют код запроса == 0;

Поскольку у вас есть несколько уведомлений, каждый из них должен использовать другой requestCode.

Итак, попробуйте изменить:

Из:

 PendingIntent pendingCancelIntent = PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ; 

Для того, чтобы:

 PendingIntent pendingCancelIntent = PendingIntent.getBroadcast(context, this.notificationId, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT) ; 

Я проверил ваш код здесь, и он работает после изменения, которое я сделал.

Всегда лучше использовать построитель уведомлений. Вот пример:

  NotificationCompat.Builder mBuilder=new NotificationCompat.Builder(this); mBuilder.setContentTitle("Your title"); mBuilder.setOnlyAlertOnce(true); mBuilder.setAutoCancel(true); mBuilder.setContentText("main content") mBuilder.setSubText("subtext") 

Затем вы создадите намерение, к какому действию вы хотите открыть при нажатии на уведомление

  intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); 

Затем создайте менеджер уведомлений

  notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = mBuilder.build(); notification.flags = Notification.FLAG_AUTO_CANCEL; notificationManager.notify(notificationID, notification); 

NotificationID может быть любым целочисленным значением. Использование этого типа дает вам преимущество всегда следовать стандартам Android для уведомлений.