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?

Nezir
quelle

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)

RoflcoptrException
quelle
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);
}
Ankit Patial
quelle
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.

Stephane Mathis
quelle
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());`
farhad.kargaran
quelle
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.

pilotmario
quelle
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 ... !!

Dhruv Raval
quelle
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);
}
Akansha Patel
quelle
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

Muhammad Usman Ghani
quelle
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);
gil.fernandes
quelle
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());
        }
    }
Szabolcs Becze
quelle
0

Rufen Sie einfach die ID an:

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