Android: supprimer la notification de la barre de notification


166

J'ai créé une application et avec un événement, je parviens à ajouter une notification dans la barre de notification Android. Maintenant, j'ai besoin d'un exemple de comment supprimer cette notification de la barre de notification sur un événement ??



pour un morceau de code, voir Suppression de la notification
Tofeeq Ahmad

Réponses:


182

Ceci est assez simple. Vous devez appeler cancelou cancelAllsur votre NotificationManager. Le paramètre de la méthode d'annulation est l'ID de la notification qui doit être annulée.

Voir l'API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


Merci Roflcoptr :) Je l'ai trouvé ici: stackoverflow.com/questions/2839727/…
Nezir

3
private static final int MY_NOTIFICATION_ID = 1234; Chaîne ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, notification); L'exemple de code n'est pas complet. Cela dépend de la manière dont vous avez créé votre notification. Assurez-vous simplement d'utiliser le même identifiant pour annuler votre notification que celui que vous avez utilisé lors de la création de votre notification. Pour annuler: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir

Vous avez sauvé la mise!, Un plaisir de lire des gens comme vous, même si ce ne sont pas des réponses complexes à des problèmes complexes, des gens comme vous nous aident beaucoup dans les moments difficiles. Merci beaucoup.
e-info128

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

1
qu'en est-il de ces notifications créées par le système?
Zaid Mirza

220

Vous pouvez essayer ce code rapide

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

19
Cela devrait être la bonne réponse car elle est simple, correcte et va directement au but.
ZeroTek

1
Salut, c'est la bonne réponse. Mais la barre de notification reste visible. Y a-t-il un moyen de le cacher également? Par exemple, j'ai deux actions associées à la notification: annuler et terminé. Lorsque l'une de ces actions est effectuée, je supprime la notification. Mais cela ne supprime que la notification, mais la barre de notification reste visible.
Shajeel Afzal

1
1 ligne, il suffit d'appeler l'ID de notification: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue

vous n'avez pas besoin de ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax

61

Vous pouvez également appeler cancelAllle gestionnaire de notifications, vous n'avez même pas à vous soucier des identifiants de notification.

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

EDIT: J'ai été déclassé, alors je devrais peut-être préciser que cela supprimera uniquement la notification de votre application.


il n'y a pas de gestionnaire de notifications pour le premier plan:startForeground(NOTIFICATION_ID, mNotification);
user924

12

définissez simplement setAutoCancel (True) comme le code suivant:

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
Cela ne fonctionne que si vous appuyez directement sur la notification. Appuyer sur l'action (comme ici: pl.vc/1gvrli ) ne supprime pas la notification.
baris1892 du

Ce n'est pas ce qui a été demandé. La question: "J'ai besoin d'un exemple pour supprimer cette notification de la barre de notification lors d'un événement ??"
David

12

CA aidera:

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

cela devrait supprimer toutes les notifications effectuées par l'application

et si vous créez une notification en appelant

startForeground();

dans un service, vous devrez peut-être appeler

stopForeground(false);

d'abord, puis annulez la notification.


Si possible, pouvez-vous également répondre à cette question? J'ai fait la même chose que vous avez suggéré, mais cela ne fonctionne pas pour moi sur Android 10. Cliquez ici pour la question
Maulik Dodia

7

Si vous générez une notification à partir d'un service démarré au premier plan à l' aide de

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Puis émettre

notificationManager.cancel(NOTIFICATION_ID);

ne fonctionne pas l'annulation de la notification et la notification apparaît toujours dans la barre d'état. Dans ce cas particulier, vous allez les résoudre de 2 manières:

1> Utilisation de stopForeground (false) à l'intérieur du service:

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

2> Détruisez cette classe de service avec l'activité d'appel:

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

La deuxième façon préfère davantage la notification du lecteur de musique parce que non seulement la notification supprime mais supprime également le lecteur ... !!


Merci pour votre réponse! L'utilisation stopForeground(true); manager.cancelAll();est ce qui l'a résolu pour moi!
chenshuiluke

3

Veuillez essayer ceci,

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

Si possible, pouvez-vous également répondre à cette question? J'ai fait la même chose que vous avez suggéré, mais cela ne fonctionne pas pour moi sur Android 10. Cliquez ici pour la question
Maulik Dodia

2

Utilisez le NotificationManager pour annuler votre notification. Il vous suffit de fournir votre identifiant de notification

mNotificationManager.cancel (VOTRE_NOTIFICATION_ID);

vérifiez également ce lien Voir le lien du développeur


2

NotificationManager.cancel(id)est la bonne réponse. Pourtant, vous pouvez supprimer dans Android Oreo et les notifications ultérieures en supprimant tout le canal de notification. Cela devrait supprimer tous les messages du canal supprimé.

Voici l'exemple de la documentation Android :

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

1

Sur l'API Android> = 23, vous pouvez effectuer une opération comme celle-ci pour supprimer un groupe de notifications.

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

0

ID d'appel juste:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.