如何在Android中清除通知

是否有可能以编程方式清除通知?

我用NotificationManager试过了,但没有成功。 有没有其他办法可以做到这一点?

使用以下代码取消通知:

 NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(NOTIFICATION_ID); 

在这个代码中总是有用于通知的相同的id。 如果您需要取消不同的通知,则必须保存用于创build通知的ID。

来自: http : //developer.android.com/guide/topics/ui/notifiers/notifications.html

要在用户从“通知”窗口中select状态栏通知时清除状态栏通知,请将“FLAG_AUTO_CANCEL”标志添加到通知对象。 您也可以使用cancel(int)手动清除它,将通知ID传递给它,或使用cancelAll()清除所有通知。

但Donal是正确的,你只能清除你创build的通知。

由于没有人发布代码的答案:

 notification.flags = Notification.FLAG_AUTO_CANCEL; 

..如果你已经有旗帜,你可以或者FLAG_AUTO_CANCEL像这样:

 notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL; 

从API级别18(Jellybean MR2)开始,您可以通过NotificationListenerService取消除您自己以外的通知。

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

 private void clearNotificationExample(StatusBarNotification sbn) { myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId()); } 

请尝试在NotificationManager中提供的默认方法。

NotificationManager.cancelAll()删除所有通知。 NotificationManager.cancel(notificationId)删除特定的通知。

如果您使用NotificationCompat.Builderandroid.support.v4的一部分),那么只需调用其对象的方法setAutoCancel

 NotificationCompat.Builder builder = new NotificationCompat.Builder(context); builder.setAutoCancel(true); 

有些人报告说setAutoCancel()不适合他们,所以你也可以尝试这种方式

 builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL; 

请注意, getNotification()方法已被弃用

  String ns = Context.NOTIFICATION_SERVICE; NotificationManager Nmang = (NotificationManager) getApplicationContext() .getSystemService(ns); Nmang .cancel(getIntent().getExtras().getInt("notificationID")); 

更多的参考请点击这里http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html

实际上,在开始使用API​​ Level 18之前,您可以取消由其他应用程序发布的通知,而不是使用NotificationListenerService,但这种方法将不再适用于Lollipop,这里是删除通知的方法,其中还包括Lillipop API。

 if (Build.VERSION.SDK_INT < 21) { cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId()); } else { cancelNotification(sbn.getKey()); } 

如果您正在使用在前台启动的服务生成通知

 startForeground(NOTIFICATION_ID, notificationBuilder.build()); 

然后发行

 notificationManager.cancel(NOTIFICATION_ID); 

不会最终取消通知,并且通知仍然出现在状态栏中。 在这个特殊的情况下,你需要问题

 stopForeground( true ); 

从服务内部将其放回后台模式并同时取消通知。 或者,您可以将其推入后台,而不必取消通知,然后取消通知。

 stopForeground( false ); notificationManager.cancel(NOTIFICATION_ID); 
  Notification mNotification = new Notification.Builder(this) .setContentTitle("A message from: " + fromUser) .setContentText(msg) .setAutoCancel(true) .setSmallIcon(R.drawable.app_icon) .setContentIntent(pIntent) .build(); 

.setAutoCancel(真)

当您点击通知时,打开相应的活动并从通知栏中删除通知

  // Get a notification builder that's compatible with platform versions // >= 4 NotificationCompat.Builder builder = new NotificationCompat.Builder( this); builder.setSound(soundUri); builder.setAutoCancel(true); 

如果你使用通知生成器