2010-08-29 159 views
131

我已經創建了一個應用程序,並且有一個事件可以在android通知欄中添加通知。現在我需要示例如何從事件通知欄中刪除該通知?Android:從通知欄中刪除通知

+1

的[從狀態欄中的刪除通知圖標]可能重複(http://stackoverflow.com/questions/2839727/remove-the-notification- icon-from-the-status-bar) – rds 2013-02-21 15:10:18

+0

代碼片段請參閱[刪除通知](http://androidtrainningcenter.blogspot.in/2013/04/removing-status-bar-notification-from.html) – Sameer 2013-04-21 07:06:47

回答

141

這很簡單。您必須在NotificationManager上撥打cancelcancelAll。取消方法的參數是應該取消通知的ID。

見API:http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

+0

謝謝Roflcoptr :) 我在這裏找到它:http://stackoverflow.com/questions/2839727/remove-the-notification-icon-from-the-status-bar – Nezir 2010-08-29 15:09:12

+2

private static final int MY_NOTIFICATION_ ID = 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager =(NotificationManager)getSystemService(ns); mNotificationManager.notify(MY_NOTIFICATION_ID,notification); 示例代碼不完整。這取決於你如何創建你的通知。只要確保您使用相同的ID來取消您在創建通知時使用的通知。 取消: mNotificationManager.cancel(MY_NOTIFICATION_ID); – Nezir 2010-08-29 15:19:05

+0

你節省了一天!,很高興看到像你這樣的人,即使他們不是複雜問題的複雜答案,像你這樣的人在困難時期幫助我們很多。非常感謝你。 – 2016-04-30 23:50:33

184

你可以試試這個簡單的代碼

public static void cancelNotification(Context ctx, int notifyId) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns); 
    nMgr.cancel(notifyId); 
} 
+14

這應該是正確的答案,因爲它很簡單,正確並直接適用於這一點。 – ZeroTek 2013-07-11 10:42:07

+1

嗨,這是正確的答案。但通知托盤仍然可見。有什麼方法可以隱藏它嗎?例如,我有兩個與通知相關的操作:取消和完成。當我採取這些行動時,我將刪除通知。但是,這樣做只會刪除通知,但通知托盤保持可見狀態。 – 2014-11-14 21:26:14

1

使用NotificationManager取消通知。您只需提供您的通知ID

mNotificationManager.cancel(YOUR_NOTIFICATION_ID);

也檢查此鏈接 See Developer Link

50

您也可以撥打cancelAll在通知管理器,所以你甚至不必擔心通知的ID。

NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
notifManager.cancelAll(); 

編輯:我downvoted所以也許我應該指定,這隻會從您的應用程序中刪除通知。

+2

謝謝你節省了時間.. – Reshma 2015-03-18 05:44:20

+0

沒有前臺通知管理器:'startForeground(NOTIFICATION_ID,mNotification);' – user924 2017-08-30 21:50:42

9

只需設置setAutoCancel(真),如下面的代碼:

Intent resultIntent = new Intent(GameLevelsActivity.this, NotificationReceiverActivityAdv.class); 

PendingIntent resultPendingIntent = 
     PendingIntent.getActivity(
       GameLevelsActivity.this, 
       0, 
       resultIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT 
       ); 

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
     getApplicationContext()).setSmallIcon(R.drawable.icon) 
     .setContentTitle(adv_title) 
     .setContentText(adv_desc) 
     .setContentIntent(resultPendingIntent) 
     //HERE IS WHAT YOY NEED: 
     .setAutoCancel(true); 

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
manager.notify(547, mBuilder.build());` 
+3

只有當你直接點擊通知時纔有效。點擊動作(如https://pl.vc/1gvrli)不會刪除通知。 – baris1892 2016-09-27 08:48:48

+0

這不是被問到的。問題:「我需要示範如何從事件通知欄中刪除該通知?」 – David 2017-07-11 05:58:24

5

如果您是從在前景啓動的服務使用

startForeground(NOTIFICATION_ID, notificationBuilder.build()); 

產生通知再用髮卡

notificationManager.cancel(NOTIFICATION_ID); 

無法取消通知&通知仍會出現在狀態欄中。在這種特殊情況下,您將通過2種方式解決這些:

1>使用stopForeground(假)內服務:

stopForeground(false); 
notificationManager.cancel(NOTIFICATION_ID); 

2>銷燬服務類呼叫活動:

Intent i = new Intent(context, Service.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
if(ServiceCallingActivity.activity != null) { 
    ServiceCallingActivity.activity.finish(); 
} 
context.stopService(i); 

第二種方式喜歡音樂播放器通知更因爲不僅通知刪除而且刪除p層也... !!

+0

感謝您的回答!使用'stopForeground(true); manager.cancelAll();'是爲我解決了它! – Sky 2016-12-12 04:54:46

3

這將幫助:

NotificationManager mNotificationManager = (NotificationManager) 
      getSystemService(NOTIFICATION_SERVICE); 
mNotificationManager.cannelAll(); 

,如果你通過調用

startForeground(); 

一個Service.you內創建一個通知可能需要調用

stopForeground(false); 

先取消通知。

1

在Android API> = 23上,您可以這樣做來刪除一組通知。

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

NotificationManager.cancel(id)是正確的答案。但是您可以刪除Android Oreo及以後的通知,刪除整個通知頻道。這應該刪除已刪除通道中的所有消息。

下面是從Android documentation的例子:

NotificationManager mNotificationManager = 
     (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
// The id of the channel. 
String id = "my_channel_01"; 
mNotificationManager.deleteNotificationChannel(id);