当有多个具有不同通知ID的通知时,如何在android中关闭通知?
Posted
技术标签:
【中文标题】当有多个具有不同通知ID的通知时,如何在android中关闭通知?【英文标题】:How to Dismiss a notification in android when there are multiple notification with different notification Ids? 【发布时间】:2020-10-14 06:10:31 【问题描述】:当有多个通知具有不同的通知 ID 并且当我取消通知时只有一个被取消时,如何在 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);
【问题讨论】:
为什么不想使用循环? Николай Гольцев 对不起,我不明白循环是为了什么? 你试过 manager.cancelAll(); @AliAhmed 它一次清除所有通知我想在多通知情况下单击操作按钮清除一个通知 如果您想删除多个通知,您必须将所有通知的通知 ID 保留在列表中的某个位置或您可以管理的任何其他方式。然后您可以使用特定的 Notification Id 将它们一一删除 【参考方案1】:我通过简单地将通知 ID 传递给 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 将通知 id 的值传递给 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(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));" 用于在通知关闭后关闭通知抽屉
【讨论】:
以上是关于当有多个具有不同通知ID的通知时,如何在android中关闭通知?的主要内容,如果未能解决你的问题,请参考以下文章