也许试试这个:
NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(NOTIFICATION_ID);
或者,您也可以执行此操作以取消给定上下文中的所有通知:
notificationManager.cancelAll();
请参阅此文档的链接: NotificationManager
在发生以下情况之一之前,通知仍然可见:
用户单独或使用“全部清除”(如果可以清除通知)解除通知。 用户单击通知,并在创建通知时调用setAutoCancel()。 您可以为特定通知ID调用cancel()。此方法还会删除正在进行的通知。 您调用cancelAll(),它会删除您之前发出的所有通知。 如果在使用setTimeoutAfter()创建通知时设置超时,系统会在指定的持续时间过后取消通知。如果需要,您可以在指定的超时持续时间过去之前取消通知
public void cancelNotification() { String ns = NOTIFICATION_SERVICE; NotificationManager nMgr = (NotificationManager) getActivity().getApplicationContext().getSystemService(ns); nMgr.cancel(NOTIFICATION_ID); }
所有通知(甚至其他应用程序通知)都可以通过收听'NotificationListenerService'来删除,如中所述 NotificationListenerService实现
在您必须致电的服务中 cancelAllNotifications() 。
cancelAllNotifications()
必须通过应用程序和应用程序为您的应用程序启用该服务。通知 - >特殊应用访问权限 - >通知访问权限。
添加到清单:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:label="Test App" android:name="com.test.NotificationListenerEx" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter> </service>
然后在代码中;
public class NotificationListenerEx extends NotificationListenerService { public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { NotificationListenerEx.this.cancelAllNotifications(); } }; @Override public void onNotificationPosted(StatusBarNotification sbn) { super.onNotificationPosted(sbn); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { super.onNotificationRemoved(sbn); } @Override public IBinder onBind(Intent intent) { return super.onBind(intent); } @Override public void onDestroy() { unregisterReceiver(broadcastReceiver); super.onDestroy(); } @Override public void onCreate() { super.onCreate(); registerReceiver(broadcastReceiver, new IntentFilter("com.test.app")); }
之后使用广播接收器触发全部清除。