是否可以取消所有具有特定标签的通知?

Is it possible to cancel all notifications that have a certain tag?

我正在制作一个 android 应用程序,我想取消所有具有特定标签的通知。

现在似乎只能通过他们的 id (int id) 或者他们的 id 和标签来取消通知。

mNotificationManager.cancel(int id);

mNotificationManager.cancel(字符串标签, int id);

我希望能够取消String标签的所有通知,而不管int id。

这可能吗?

不,不是。 Notification的设置方式,id为主键。您可以添加带有标签的子项,并以这种方式取消单个 (tag, id) 对,但您不能仅基于标签取消。真的,我不确定他们为什么要添加一个标签参数,因为它看起来很冗余,除了可能是一个字符串参数可以使调试更容易。

在 Android 上使用 API >= 23 你可以做这样的事情来删除一组通知:

for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
    if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
        mNotificationManager.cancel(statusBarNotification.getId());
    }
}

如果您使用通知组,似乎是可行的。取消群摘要通知好像是把整个群都取消了。

是的,有可能

  1. 使用 mNotificationManager.getActiveNotifications()
  2. 获取您的应用生成的所有活动通知
  3. 根据 TAG 过滤通知。
  4. 取消那些通知。

试试下面的代码

void cancelGivenTagNotification(String tag){
    StatusBarNotification notiList[] = notificationManager.getActiveNotifications();
    for(int i=0;i<notiList.length;i++){
        if(notiList[i].getTag().equals(tag)){
            int notiId = notiList[i].getId();
            notificationManager.cancel(tag,notiId);
        }

    }
}