【问题标题】:Is it possible to cancel all notifications that have a certain tag?是否可以取消所有具有特定标签的通知?
【发布时间】:2016-03-12 17:56:40
【问题描述】:

我正在制作一个安卓应用,我想取消所有带有特定标签的通知。

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

mNotificationManager.cancel(int id);

mNotificationManager.cancel(String tag, int id);

无论int id如何,我都希望能够取消所有String标签的通知。

这可能吗?

【问题讨论】:

    标签: android mobile notifications notificationmanager


    【解决方案1】:

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

    【讨论】:

    • 标签在您使用通知开发具有多个组件的应用程序时非常有用。如果为每个组件设置标签,则不必担心所有组件上下文中 id 的唯一性。它们只需要在本地是独一无二的。
    • @Nedko 您在谈论哪些组件?你能给我tag使用的代码示例吗?
    • @Gabe tag 对调试有用吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在使用 API >= 23 的 Android 上,您可以执行以下操作来删除一组通知:

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

      【讨论】:

        【解决方案4】:

        是的,有可能

        1. 使用mNotificationManager.getActiveNotifications() 获取您的应用程序构建的所有活动通知
        2. 根据 TAG 过滤通知。
        3. 取消这些通知。

        试试下面的代码

        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);
                }
        
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-11-26
          • 2021-12-29
          • 1970-01-01
          • 1970-01-01
          • 2018-07-04
          • 2018-04-29
          • 2015-10-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多