我创建了一个应用程序,并通过一个事件设法在android通知栏中添加了通知。现在,我需要示例如何在事件的通知栏中删除该通知?
我创建了一个应用程序,并通过一个事件设法在android通知栏中添加了通知。现在,我需要示例如何在事件的通知栏中删除该通知?
Answers:
这很简单。您必须致电cancel
或cancelAll
在NotificationManager上。cancel方法的参数是应取消的通知的ID。
请参阅API:http : //developer.android.com/reference/android/app/NotificationManager.html#cancel(int)
您可以尝试此快速代码
public static void cancelNotification(Context ctx, int notifyId) {
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
nMgr.cancel(notifyId);
}
您还可以致电cancelAll
通知管理器,因此您甚至不必担心通知ID。
NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();
编辑:我被否决了,所以也许我应该指定这只会从您的应用程序中删除通知。
startForeground(NOTIFICATION_ID, mNotification);
只需将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());`
这将有助于:
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.cancelAll();
这应删除该应用发出的所有通知
如果您通过致电创建通知
startForeground();
在服务内部。您可能必须致电
stopForeground(false);
首先,然后取消通知。
如果您正在使用以下方法在前台启动的服务中生成通知,
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();
是什么为我解决了!
请尝试一下
public void removeNotification(Context context, int notificationId) {
NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
.getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancel(notificationId);
}
使用NotificationManager取消您的通知。您只需要提供您的通知ID
mNotificationManager.cancel(YOUR_NOTIFICATION_ID);
还要检查此链接 请参阅开发人员链接
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);