从其他应用程序中删除通知栏中的通知

问题描述:

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

为什么我要这样做?

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

有两个senarios;编号1:

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

塞纳里奥2:

  1. 该机器人设备接收SMS。
  2. Handcent SMS显示通知。
  3. 用户通过网页界面读取短信。
  4. 我的应用程序清除Handcent SMS显示的新SMS通知并将SMS标记为已读。

这可能吗?

+0

为什么你会想要这样做?我不希望任何应用程序窃取我的通知。 – 2011-03-08 17:09:00

+6

埃米尔,我告诉过你为什么要在“为什么要这样做? :)。 – johboh 2011-03-09 06:13:43

+0

@johboh你现在可以取消其他应用程序的通知了吗? – 2015-03-14 08:58:16

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

+1

我有点困惑。谁的答案是对的?你的,还是@Oasis Feng? – 2015-04-22 18:09:44

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

您需要注册您的应用程序为NotificationListenerService,然后致电NotificationListenerService.cancelNotification(String pkg, String tag, int id)取消一个通知。

+2

请注意,创建NotificationListenerService实例并调用cancelNotification()将导致NullPointerException。您必须扩展NotificationListenerService并启动服务,然后从服务中取消通知。 – black 2014-03-30 06:46:56

+0

我在onNotificationPosted()中运行它,但它不取消它。你可以看一下吗? http://*.com/questions/29803218/cant-cancel-notification-using-notificationlistenerservice – 2015-04-22 18:10:59

+0

请注意,此方法自Lollipop以来已弃用,它的签名已更改,因为@QuadX在其答案中指出 – 2016-12-29 13:46:57

您可以关闭任何通知使用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