Как отклонить уведомление в Android при наличии нескольких уведомлений с разными идентификаторами уведомлений?

#android #push-notification #notifications #android-notifications

#Android #push-уведомление #уведомления #android-уведомления

Вопрос:

Как отклонить уведомление в Android при наличии нескольких уведомлений с разными идентификаторами уведомлений, и когда я отменяю уведомление, отменяется только одно из них

Используя приведенные ниже строки, я могу удалить только одно уведомление, а не все.

 public class BlankReceiverClass extends BroadcastReceiver {
    public BlankReceiverClass() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        //nothing to do
        NotificationManager manager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(NOTIFICATION_ID);
        Intent noDataActivityIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        context.sendBroadcast(noDataActivityIntent);
    }
}
  

Комментарии:

1. Почему вы не хотите использовать цикл?

2. вы пробовали manager.cancelAll();

3. Когда вы снова и снова создаете уведомление с одним и тем же идентификатором уведомления. тогда будет отменено только последнее уведомление с этим идентификатором. Вы можете либо удалить все уведомления с помощью cancelAll(), либо отменить конкретное уведомление с помощью cancel(NOTIFICATION_ID)

4. если вы хотите удалить несколько уведомлений, вы должны сохранить идентификатор уведомления всех уведомлений где-нибудь в списке или любым другим доступным вам способом. Затем вы можете удалять их одно за другим с определенным идентификатором уведомления

5. Ваша проблема мне все еще не ясна. Чего вы именно хотите достичь?

Ответ №1:

Я решил проблему, просто передав идентификатор уведомления в PendingIntent следующим образом

 Intent noActionIntent = new Intent(this, CancelNotificationReceiver.class);
noActionIntent.putExtra("NotificationID", noti_1_ID);
pendingNoActionIntent = PendingIntent.getBroadcast(this, noti_1_ID, noActionIntent, PendingIntent.FLAG_CANCEL_CURRENT);
  

и передача значения идентификатора уведомления через intent в BroadcastReceiver, как этот фрагмент кода

 public class CancelNotificationReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        int notificationId = intent.getIntExtra("NotificationID", 0);
        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(notificationId);

        context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
    }
}
  

Примечание: «context.sendBroadcast(новое намерение(намерение.ACTION_CLOSE_SYSTEM_DIALOGS));» Используется для закрытия ящика уведомлений после отклонения уведомления