Android:从通知栏删除通知


Answers:


182

这很简单。您必须致电cancelcancelAll在NotificationManager上。cancel方法的参数是应取消的通知的ID。

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


由于Roflcoptr :)我在这里找到:stackoverflow.com/questions/2839727/...
Nezir

3
私有静态最终整数MY_NOTIFICATION_ID = 1234; 字符串ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager =(NotificationManager)getSystemService(ns); mNotificationManager.notify(MY_NOTIFICATION_ID,通知); 示例代码不完整。这取决于您如何创建通知。只需确保使用与创建通知时相同的ID即可取消通知。要取消:mNotificationManager.cancel(MY_NOTIFICATION_ID);
齐尔

您节省了一天的时间,即使他们不是解决复杂问题的复杂答案,也很高兴阅读像您这样的人,在困难时期我们也能提供很多帮助。非常感谢你。
e-info128 '16

public void delNoti(int id){(((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE))。cancel(id);}
phnghue

1
系统创建的那些通知呢?
Zaid Mirza

219

您可以尝试此快速代码

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

19
这应该是正确的答案,因为它很简单,正确并且很直接。
ZeroTek

1
您好,这是正确的答案。但是通知托盘仍然可见。有什么办法隐藏它吗?例如,我有两个与通知相关的动作:取消和完成。当采取上述任何一种操作时,我将删除通知。但是这样做只会删除通知,但通知托盘仍然可见。
Shajeel Afzal 2014年

1
1行,只需调用通知ID:public void delNoti(int id){(((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE))。cancel(id);}
phnghue

您不需要ctx。NotificationManager nMgr =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
canbax

61

您还可以致电cancelAll通知管理器,因此您甚至不必担心通知ID。

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

编辑:我被否决了,所以也许我应该指定这只会从您的应用程序中删除通知。


没有用于前台的通知管理器:startForeground(NOTIFICATION_ID, mNotification);
user924

12

只需将setAutoCancel(True)设置为以下代码即可:

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
仅当您直接点击通知时,此方法才有效。轻按操作(如此处:pl.vc/1gvrli)不会删除通知。
baris1892 '16

这不是被要求的。问题:“我需要示例如何从事件的通知栏中删除该通知?”
大卫

12

这将有助于:

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

这应删除该应用发出的所有通知

如果您通过致电创建通知

startForeground();

在服务内部。您可能必须致电

stopForeground(false);

首先,然后取消通知。


如果可能的话,您也可以回答这个问题吗?我的操作与您建议的相同,但在Android 10上不起作用。单击此处以提出问题
Maulik Dodia

7

如果您正在使用以下方法在前台启动的服务中生成通知,

startForeground(NOTIFICATION_ID, notificationBuilder.build());

然后发出

notificationManager.cancel(NOTIFICATION_ID);

取消通知无效,并且状态栏中仍然显示通知。在这种特殊情况下,您将通过两种方法解决这些问题:

1>在服务内部使用stopForeground(false):

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);

第二种方式更喜欢音乐播放器通知,因为通过方式不仅可以删除通知,还可以删除播放器...!


感谢您的回答!使用stopForeground(true); manager.cancelAll();是什么为我解决了!
chenshuiluke

3

请尝试一下

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}

如果可能的话,您也可以回答这个问题吗?我的操作与您建议的相同,但在Android 10上不起作用。单击此处以提出问题
Maulik Dodia


2

NotificationManager.cancel(id)是正确的答案。但是您可以在Android Oreo中删除通过删除整个通知渠道来删除和更高版本的通知。这应该删除已删除频道中的所有消息。

这是来自Android文档的示例:

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

1

在> = 23的Android API上,您可以执行以下操作来删除一组通知。

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

0

只需拨打ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.