Android: Benachrichtigung aus der Benachrichtigungsleiste entfernen


166

Ich habe eine Anwendung erstellt und mit einem Ereignis kann ich eine Benachrichtigung in der Android-Benachrichtigungsleiste hinzufügen. Jetzt brauche ich ein Beispiel, wie man diese Benachrichtigung aus der Benachrichtigungsleiste eines Ereignisses entfernt?



Antworten:


182

Das ist ganz einfach. Sie müssen canceloder cancelAllauf Ihrem NotificationManager anrufen . Der Parameter der Abbruchmethode ist die ID der Benachrichtigung, die abgebrochen werden soll.

Siehe die API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


Danke Roflcoptr :) Ich habe es hier gefunden: stackoverflow.com/questions/2839727/…
Nezir

3
private static final int MY_NOTIFICATION_ID = 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, Benachrichtigung); Der Beispielcode ist nicht vollständig. Dies hängt davon ab, wie Sie Ihre Benachrichtigung erstellt haben. Stellen Sie einfach sicher, dass Sie zum Abbrechen Ihrer Benachrichtigung dieselbe ID verwenden, die Sie beim Erstellen Ihrer Benachrichtigung verwendet haben. So brechen Sie ab: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir

Sie haben den Tag gerettet!, Eine Freude, Menschen wie Sie zu lesen, auch wenn sie keine komplexen Antworten auf komplexe Probleme sind. Menschen wie Sie helfen uns in schwierigen Zeiten sehr. Vielen Dank.
E-Info128

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

1
Was ist mit den Benachrichtigungen, die vom System erstellt werden?
Zaid Mirza

219

Sie können diesen Schnellcode ausprobieren

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

19
Dies sollte die richtige Antwort sein, da sie einfach und korrekt ist und direkt auf den Punkt kommt.
ZeroTek

1
Hallo, das ist die richtige Antwort. Das Benachrichtigungsfach bleibt jedoch sichtbar. Gibt es eine Möglichkeit, es auch zu verstecken? Zum Beispiel habe ich zwei Aktionen mit der Benachrichtigung verbunden: Abbrechen und erledigt. Wenn eine dieser Aktionen ausgeführt wird, entferne ich die Benachrichtigung. Dabei wird jedoch nur die Benachrichtigung entfernt, die Benachrichtigungsleiste bleibt jedoch sichtbar.
Shajeel Afzal

1
1 Zeile, rufen Sie einfach die Benachrichtigungs-ID auf: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue

du brauchst kein ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
Canbax

61

Sie können auch cancelAllden Benachrichtigungsmanager anrufen , sodass Sie sich nicht einmal um die Benachrichtigungs-IDs kümmern müssen.

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

BEARBEITEN: Ich wurde abgelehnt, daher sollte ich möglicherweise angeben, dass dadurch nur die Benachrichtigung aus Ihrer Anwendung entfernt wird.


Es gibt keinen Benachrichtigungsmanager für den Vordergrund:startForeground(NOTIFICATION_ID, mNotification);
user924

12

Setzen Sie einfach setAutoCancel (True) wie folgt:

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
Dies funktioniert nur, wenn Sie direkt auf die Benachrichtigung tippen. Durch Tippen auf die Aktion (wie hier: pl.vc/1gvrli ) wird die Benachrichtigung nicht entfernt.
Baris1892

Dies wurde nicht gefragt. Die Frage: "Ich benötige ein Beispiel, wie diese Benachrichtigung bei einem Ereignis aus der Benachrichtigungsleiste entfernt werden kann."
David

12

das wird helfen:

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

Dadurch sollten alle von der App vorgenommenen Benachrichtigungen entfernt werden

und wenn Sie eine Benachrichtigung durch Anrufen erstellen

startForeground();

In einem Service müssen Sie möglicherweise anrufen

stopForeground(false);

Zuerst die Benachrichtigung abbrechen.


Wenn möglich, können Sie diese Frage auch beantworten? Ich habe das Gleiche getan, wie Sie vorgeschlagen haben, aber es funktioniert nicht für mich unter Android 10. Klicken Sie hier für die Frage
Maulik Dodia

7

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

funktioniert nicht Abbrechen Die Benachrichtigung und Benachrichtigung wird weiterhin in der Statusleiste angezeigt. In diesem speziellen Fall lösen Sie diese auf zwei Arten:

1> Verwenden von stopForeground (false) im Service:

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);

2> Zerstören Sie diese Serviceklasse mit aufrufender Aktivität:

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

Zweiter Weg bevorzugen in Musik-Player-Benachrichtigung mehr, weil auf diese Weise nicht nur Benachrichtigung entfernen, sondern auch Player entfernen ... !!


Danke für deine Antwort! Verwenden stopForeground(true); manager.cancelAll();ist das, was es für mich gelöst hat!
Chenshuiluke

3

Bitte versuchen Sie dies,

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

Wenn möglich, können Sie diese Frage auch beantworten? Ich habe das gleiche getan, wie Sie vorgeschlagen haben, aber es funktioniert nicht für mich auf Android 10. Klicken Sie hier für die Frage
Maulik Dodia

2

Verwenden Sie den NotificationManager, um Ihre Benachrichtigung abzubrechen. Sie müssen nur Ihre Benachrichtigungs-ID angeben

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

Überprüfen Sie auch diesen Link. Siehe Entwicklerlink


2

NotificationManager.cancel(id)ist die richtige Antwort. Sie können Benachrichtigungen in Android Oreo und späteren Versionen entfernen, indem Sie den gesamten Benachrichtigungskanal löschen. Dies sollte alle Nachrichten im gelöschten Kanal löschen.

Hier ist das Beispiel aus der Android-Dokumentation :

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

1

Unter Android API> = 23 können Sie Folgendes tun, um eine Gruppe von Benachrichtigungen zu entfernen.

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

0

Rufen Sie einfach die ID an:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.