2015-02-23 79 views
5

我想從狀態欄中刪除所有可取消的通知。我知道如何刪除我的應用程序通知我以前看過這個post,但我想刪除其他應用程序的通知。刪除通知欄中的所有通知

有在所有Android版本的通知一個「清除」按鈕清除其使用該標誌的所有通知:Notification.FLAG_AUTO_CANCEL

這意味着它有可能取消所有通知。但我還沒有找到任何有關如何做到這一點的文件。有沒有人指導我如何做到這一點?

感謝

+0

爲了訪問所有通知中的通知欄,你需要有你需要的用戶啓用無障礙服務,爲您app.something像[這裏](http://stackoverflow.com/questions/12554448/ android-accessibility-service-detect-notification)。你的應用程序支持這個嗎? – Droidekas 2015-02-23 06:10:30

+0

我想我可以添加到我的應用程序,然後我該怎麼辦? – 2015-02-23 06:19:36

+0

然後你可以使用通知管理器和id來刪除通知,如[這裏]提到的(http://stackoverflow.com/questions/2839727/remove-the-notification-icon-from-the-status-bar)和[這裏](http://stackoverflow.com/questions/3595232/android-remove-notification-from-notification-bar) – Droidekas 2015-02-23 06:32:33

回答

12

與API等級18,你可以取消發佈使用NotificationListenerService比你自己不同的其它應用的通知開始,法棒棒糖變化不大,這裏是刪除通知還覆蓋Lillipop API的方式。

首先在onNotificationPosted方法裏面存儲所有的StatusBarNotification對象。 然後,您應該維護對這些對象的更新引用,如果通知以某種方式在onNotificationRemoved方法中被解除,則將其刪除。

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) 
public class NotificationService extends NotificationListenerService { 

    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 
     // Store each StatusBarNotification object 
    } 

    @Override 
    public void onNotificationRemoved(StatusBarNotification sbn) { 
     // Delete removed StatusBarNotification objects 
    } 
} 

最後,您可以使用cancelNotification方法刪除任何通知。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId()); 
} 
else { 
    cancelNotification(sbn.getKey()); 
} 
+1

官方文檔:http://developer.android.com/reference/android/service/notification /NotificationListenerService.html#cancelNotification(java.lang.String) 瞭解該調用的侷限性會很有趣。是否允許取消所有類型的通知(例如OnGoing通知)? – 2016-03-17 22:44:23