Ist es möglich, eine Benachrichtigung programmgesteuert zu löschen?
Ich habe es mit dem versucht, NotificationManager
aber es funktioniert nicht. Kann ich das auf andere Weise tun?
Ist es möglich, eine Benachrichtigung programmgesteuert zu löschen?
Ich habe es mit dem versucht, NotificationManager
aber es funktioniert nicht. Kann ich das auf andere Weise tun?
Antworten:
Verwenden Sie den folgenden Code, um eine Benachrichtigung abzubrechen:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
In diesem Code wird immer dieselbe ID für Benachrichtigungen verwendet. Wenn Sie unterschiedliche Benachrichtigungen haben, die storniert werden müssen, müssen Sie die IDs speichern, die Sie zum Erstellen der Benachrichtigung verwendet haben.
setContentText
), obwohl ich die Priorität auf 2 festgelegt habe. Irgendwelche Vorschläge?
Von: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Fügen Sie Ihrem Benachrichtigungsobjekt das Flag "FLAG_AUTO_CANCEL" hinzu, um die Statusleistenbenachrichtigung zu löschen, wenn der Benutzer sie im Benachrichtigungsfenster auswählt. Sie können es auch manuell mit cancel (int) löschen, indem Sie ihm die Benachrichtigungs-ID übergeben, oder alle Ihre Benachrichtigungen mit cancelAll () löschen.
Aber Donal hat recht, Sie können nur Benachrichtigungen löschen, die Sie erstellt haben.
Da niemand eine Code-Antwort darauf gepostet hat:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. und wenn Sie bereits Flags haben, können Sie ODER FLAG_AUTO_CANCEL folgendermaßen vorgehen:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Bitte versuchen Sie es mit der in NotificationManager bereitgestellten Standardmethode .
NotificationManager.cancelAll()
um alle Benachrichtigungen zu entfernen.
NotificationManager.cancel(notificationId)
bestimmte Benachrichtigung zu entfernen.
cancel
Methode hat, ist die cancel
Methode nicht statisch. Sie benötigen also eine Instanz NotificationManager
wie diese: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Dann können Sie notificationManager.cancel(notificationId);
wie Rohit Suthar aufrufen, auf den in seiner Antwort verwiesen wird. notificationId
ist einfach die ID, an die Sie übergeben habennotificationManager.notify(notificationId, mNotification)
Ab API-Level 18 (Jellybean MR2) können Sie andere Benachrichtigungen als Ihre eigenen über NotificationListenerService abbrechen.
@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)
Wenn Sie auf Benachrichtigung klicken, öffnen Sie die entsprechende Aktivität und entfernen Sie die Benachrichtigung aus der Benachrichtigungsleiste
Wenn Sie eine Benachrichtigung von einem Dienst generieren, der im Vordergrund mit gestartet wird
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Dann ausstellen
notificationManager.cancel(NOTIFICATION_ID);
Die Benachrichtigung wird nicht abgebrochen, und die Benachrichtigung wird weiterhin in der Statusleiste angezeigt. In diesem speziellen Fall müssen Sie ausstellen
stopForeground( true );
aus dem Dienst heraus, um ihn wieder in den Hintergrundmodus zu versetzen und gleichzeitig die Benachrichtigungen abzubrechen. Alternativ können Sie es in den Hintergrund verschieben, ohne dass es die Benachrichtigung abbricht und dann die Benachrichtigung abbricht.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Wenn Sie NotificationCompat.Builder
(einen Teil von android.support.v4
) verwenden, rufen Sie einfach die Methode des Objekts aufsetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Einige Leute berichteten, dass setAutoCancel()
dies für sie nicht funktioniert hat, also können Sie es auch so versuchen
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Beachten Sie, dass die Methode getNotification()
veraltet ist !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
Dies funktioniert, wenn Sie einen Benachrichtigungs-Builder verwenden ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
Für weitere Informationen klicken Sie hier http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Wie bereits beantwortet, bevor Sie mit API Level 18 beginnen, können Sie Benachrichtigungen, die von anderen Apps als Ihren eigenen Apps veröffentlicht wurden, mit NotificationListenerService abbrechen. Dieser Ansatz funktioniert jedoch nicht mehr mit Lollipop. Hier erfahren Sie, wie Sie Benachrichtigungen entfernen, die auch die Lillipop-API abdecken.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
was ist das?
Alle Benachrichtigungen (auch andere App-Benachrichtigungen) können durch Abhören von 'NotificationListenerService' entfernt werden, wie in NotificationListenerService Implementation erwähnt
Im Service müssen Sie anrufen cancelAllNotifications()
.
Der Dienst muss für Ihre Anwendung aktiviert werden über:
'Apps & Benachrichtigungen' -> 'Spezieller App-Zugriff' -> 'Benachrichtigungszugriff'.
Dieser Code hat bei mir funktioniert:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}