#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));» Используется для закрытия ящика уведомлений после отклонения уведомления