【问题标题】:Remove notification from notification bar from other applications从其他应用程序的通知栏中删除通知
【发布时间】:2011-03-08 17:06:08
【问题描述】:

我想从通知栏中显示的另一个应用程序中删除通知。那可能吗?据我所知,NotificationManager.cancelAll(); 仅取消调用应用程序显示的通知。

我为什么要这样做?

我有一个通过网页读取和发送 SMS 的应用程序,我希望该应用程序与现有的 SMS 应用程序(如 Handcent SMS)共同退出。我希望它的工作方式是,当通过网页阅读新收到的短信时,我想取消 Handcent SMS 显示的新短信通知,因为现在已阅读新短信。我将 SMS 标记为已读,一旦我打开 Handcent SMS,Handcent SMS 将其识别为已读,但通知仍然存在,直到我点击实际 SMS。

有两个场景; 1号:

  1. 安卓设备收到短信。
  2. Handcent SMS 显示通知。
  3. 用户在设备上阅读短信。
  4. Handcent SMS 删除通知并将 SMS 标记为已读。

情景 2:

  1. 安卓设备收到短信。
  2. Handcent SMS 显示通知。
  3. 用户通过网页界面阅读短信。
  4. 我的应用程序清除了 Handcent SMS 显示的新 SMS 通知,并将 SMS 标记为已读。

这可能吗?

【问题讨论】:

  • 你为什么要这样做?我肯定不希望任何应用窃取我的通知。
  • 阿米尔,我在“我为什么要这样做?”部分告诉了你原因。 :)。
  • @johboh 你现在可以取消其他应用程序的通知吗?

标签: android android-notifications android-notification-bar


【解决方案1】:

从 Android 4.3 开始,您现在可以取消来自任何应用的通知。

您需要将您的应用注册为NotificationListenerService,然后调用NotificationListenerService.cancelNotification(String pkg, String tag, int id) 取消一条通知。

【讨论】:

  • 请注意,创建 NotificationListenerService 的实例并调用 cancelNotification() 将导致 NullPointerException。您必须扩展 NotificationListenerService 并启动服务,然后从服务中取消通知。
  • 我在 onNotificationPosted() 中运行了它,但它并没有取消它。你能看看吗? stackoverflow.com/questions/29803218/…
  • 请注意,自从 Lollipop 以来,此方法已被弃用,它的签名已更改,正如 @QuadX 在下面的回答中指出的那样
【解决方案2】:

您可以使用 NotificationListenerService 关闭任何通知:

public class NotificationListener extends NotificationListenerService {

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
      cancelNotification(sbn.getKey());
    }
}

您的应用程序必须具有 BIND_NOTIFICATION_LISTENER_SERVICE 权限。 https://developer.android.com/reference/android/service/notification/NotificationListenerService.html

【讨论】:

    【解决方案3】:

    您可以使用 NotificationManager 取消自己的通知。
    但是你不能取消其他应用的通知,这是不可能的。

    【讨论】:

    • 我有点困惑。谁的答案真的是对的?你的,还是@Oasis Feng?
    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 2015-04-24
    • 2012-08-13
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    相关资源
    最近更新 更多