是否可以通过程序清除通知?
我尝试了使用,NotificationManager
但无法正常工作。我还有其他方法可以做到吗?
是否可以通过程序清除通知?
我尝试了使用,NotificationManager
但无法正常工作。我还有其他方法可以做到吗?
Answers:
使用以下代码取消通知:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
在此代码中,始终有用于通知的相同ID。如果您有其他需要取消的通知,则必须保存用于创建通知的ID。
setContentText
尽管将优先级设置为2 ,所有后续通知都不会显示通知消息文本(使用设置)。有什么建议吗?
来自:http : //developer.android.com/guide/topics/ui/notifiers/notifications.html
要在用户从“通知”窗口中选择状态栏通知时清除它,请将“ FLAG_AUTO_CANCEL”标志添加到通知对象。您也可以使用cancel(int)手动清除它,将通知ID传递给它,或者使用cancelAll()清除所有通知。
但是Donal是正确的,您只能清除您创建的通知。
由于没有人对此发布代码答案:
notification.flags = Notification.FLAG_AUTO_CANCEL;
..并且如果您已经有标志,则可以像这样执行FLAG_AUTO_CANCEL:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
请尝试使用NotificationManager中提供的默认方法。
NotificationManager.cancelAll()
删除所有通知。
NotificationManager.cancel(notificationId)
删除特定的通知。
cancel
方法的NotificationManager上,则该cancel
方法不是静态的,因此您需要一个这样的实例NotificationManager
:NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
然后,您可以notificationManager.cancel(notificationId);
像在他的答案中引用的Rohit Suthar那样进行调用。notificationId
只是您传递给的IDnotificationManager.notify(notificationId, mNotification)
从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());
}
Notification mNotification = new Notification.Builder(this)
.setContentTitle("A message from: " + fromUser)
.setContentText(msg)
.setAutoCancel(true)
.setSmallIcon(R.drawable.app_icon)
.setContentIntent(pIntent)
.build();
.setAutoCancel(true)
当您单击通知时,打开相应的活动并从通知栏中删除通知
如果要从前台启动的服务生成通知,请使用
startForeground(NOTIFICATION_ID, notificationBuilder.build());
然后发出
notificationManager.cancel(NOTIFICATION_ID);
并没有最终取消通知,并且通知仍显示在状态栏中。在这种情况下,您需要发出
stopForeground( true );
从服务中恢复到后台模式并同时取消通知。或者,您可以将其推送到后台,而不必先取消通知,然后再取消通知。
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
如果您使用NotificationCompat.Builder
的一部分,android.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级别18开始回答之前,您可以使用NotificationListenerService取消其他应用程序发布的通知(与您自己的应用程序不同),但是该方法将不再适用于Lollipop,这是删除也覆盖Lillipop API的通知的方法。
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
是什么?
如NotificationListenerService实施中所述,可以通过侦听“ NotificationListenerService”来删除所有通知(甚至其他应用程序通知)
在服务中,您必须致电cancelAllNotifications()
。
必须通过以下方式为您的应用程序启用该服务:
“应用和通知”->“特殊应用访问”->“通知访问”。
这段代码对我有用:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}