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 ??

Nezir
la source
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)

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

Stéphane Mathis
la source
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());`
farhad.kargaran
la source
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.

pilotmario
la source
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 ... !!

Dhruv Raval
la source
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);
}
Akansha patel
la source
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

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

ID d'appel juste:

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