web-dev-qa-db-fra.com

Commentaire effacer une notification dans Android

Est-il possible d'effacer une notification par programme?

Je l'ai essayé avec le NotificationManager mais cela ne fonctionne pas . Y at-il un autre moyen de le faire?

88
rahul

Utilisez le code suivant pour annuler une notification: 

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

Dans ce code, il y a toujours le même identifiant que celui utilisé pour les notifications. Si vous avez différentes notifications à annuler, vous devez enregistrer les identifiants que vous avez utilisés pour créer la notification.

215
Janusz

De: http://developer.Android.com/guide/topics/ui/notifiers/notifications.html

Pour effacer la notification de la barre d'état lorsque l'utilisateur la sélectionne dans la fenêtre Notifications, ajoutez l'indicateur "FLAG_AUTO_CANCEL" à votre objet Notification. Vous pouvez également l'effacer manuellement avec cancel (int) en lui passant l'ID de notification ou effacer toutes vos notifications avec cancelAll ().

Mais Donal a raison, vous ne pouvez effacer que les notifications que vous avez créées.

41
Chuck C.

Puisque personne n'a posté de code, répondez à ceci:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. et si vous avez déjà des drapeaux, vous pouvez OR FLAG_AUTO_CANCEL comme ceci:

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
32
NPike

Veuillez essayer la méthode par défaut fournie dans NotificationManager .

NotificationManager.cancelAll() pour supprimer toutes les notifications. NotificationManager.cancel(notificationId) pour supprimer une notification particulière.

13
Rohit Suthar

À partir de l'API de niveau 18 (Jellybean MR2), vous pouvez annuler des notifications autres que la vôtre via NotificationListenerService.

@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());
}
8
Jim Vitek

Si vous utilisez NotificationCompat.Builder (une partie de Android.support.v4), appelez simplement la méthode de son objet setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);

Certains gars ont signalé que setAutoCancel() ne fonctionnait pas pour eux, vous pouvez donc essayer aussi

builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;

Notez que la méthode getNotification() est obsolète !!!

3
sandalone
 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)

lorsque vous cliquez sur la notification, ouvrez l'activité correspondante et supprimez la notification de la barre de notification

3
Neeraj Singh

En fait, comme indiqué précédemment avant de commencer avec l'API de niveau 18, vous pouvez annuler les notifications envoyées par d'autres applications différentes de la vôtre à l'aide de NotificationListenerService, mais cette approche ne fonctionnera plus sous Lollipop. Voici le moyen de supprimer les notifications couvrant également l'API Lillipop.

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}
1
Alejandro Casanova
    // Get a notification builder that's compatible with platform versions
    // >= 4
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this);
    builder.setSound(soundUri);
    builder.setAutoCancel(true);

cela fonctionne si vous utilisez un générateur de notification ...

1
user2962552
   String ns = Context.NOTIFICATION_SERVICE;
  NotificationManager Nmang = (NotificationManager) getApplicationContext()
                                                     .getSystemService(ns);
  Nmang .cancel(getIntent().getExtras().getInt("notificationID"));

pour plus de références, cliquez ici http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-Android.html

1
Dhina k

Toutes les notifications (même les autres notifications d'application) peuvent être supprimées en écoutant «NotificationListenerService», comme indiqué dans NotificationListenerService Implementation

Dans le service, vous devez appeler cancelAllNotifications().

Le service doit être activé pour votre application via:

"Applications et notifications" -> "Accès spécial aux applications" -> "Accès aux notifications".

0
Samantha

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 finit pas par annuler la notification, et la notification apparaît toujours dans la barre d'état. Dans ce cas particulier, vous devrez émettre

stopForeground( true );

depuis le service pour le remettre en arrière-plan et annuler simultanément les notifications. Sinon, vous pouvez le placer en arrière-plan sans l'avoir annulée, puis annulée.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
0
Ian Gough