La notification Android ne disparaît pas après avoir cliqué sur la notification

133

Si vous rencontrez des problèmes avec une notification que je souhaite afficher dans la barre de notification. Bien que j'ai défini l'indicateur de Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELnotification, la notification ne disparaît pas après avoir cliqué dessus. Des idées sur ce que je fais mal?

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

    int icon = R.drawable.icon;
    CharSequence tickerText = "Ticker Text";
    long time = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, time);
    notification.flags = Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCEL; 

    Context context = getApplicationContext();
    CharSequence contentTitle = "Title";
    CharSequence contentText = "Text";
    Intent notificationIntent = new Intent(this, SilentFlipConfiguration.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    mNotificationManager.notify(1,notification);
Flo
la source

Réponses:

305

Alors que la construction Notificationpar NotificationBuildervous pouvez utiliser notificationBuilder.setAutoCancel(true);.

Kamil Lelonek
la source
2
Alors, quelles différences créent une notification à l'aide de Notification mNotificationManager.notify(1,notification);et à l'aide de NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Merci.
Yohanes AI
9
Cette réponse devrait être acceptée, elle est plus conforme à la doctrine de conception Android actuelle
jmaculate
Cette réponse est correcte. Accepté, on fonctionne mais pas toujours. Il y a un problème lorsqu'il y a des notifications empilées sur GCM (ou tout ce que vous utilisez). Une fois que vous envoyez un ping au serveur de notification, il revient avec beaucoup de notifications et parfois il boucle simplement l'apparence de la notification.
Nikola Milutinovic
5
notificationBuilder.setAutoCancel(true);ne fonctionne pas pour moi. Dois-je mettre avant mon intention en attente?
Kairi San
129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

De la documentation:

Bit à modifier au niveau du bit ou dans le champ des indicateurs qui devrait être défini si la notification doit être annulée lorsque l'utilisateur clique dessus

synique
la source
3
Ce n'est pas la bonne réponse. Notification.DEFAULT_LIGHTSfait partie de la Notification.defaultsclasse, pas de la Notification.flagsclasse. Voir ma réponse pour les setters appropriés.
Darcy
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; cette méthode fonctionne merci synic.
Ravikumar11
1
Le code de cette réponse a entraîné la lecture du son de notification plusieurs fois. Découvrez les autres réponses.
ban-geoengineering
27
// Uses the default lighting scheme
notification.defaults |= Notification.DEFAULT_LIGHTS;

// Will show lights and make the notification disappear when the presses it
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
Darcy
la source
1
J'ai parcouru les documents Android. Je ne sais pas vraiment quand les drapeaux doivent être utilisés. Pourquoi notification.defaults = notification.DEFAULT_LIGHTS n'est-il pas suffisant pour afficher les lumières? Parce que le vibreur et le son fonctionnent sans le drapeau.
Ashwin
J'utilise NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("New Tweet") .setContentText ("Il y a" + count + "tweets") ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph
2

La réponse pour moi était d'utiliser mBuilder.setOngoing(false)

Tribu de la machine
la source
1

Utilisez l'indicateur Notification.FLAG_AUTO_CANCEL

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent);

// Cancel the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

et pour lancer l'application:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Intent intent = new Intent(context, App.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, intent_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Sachin Suthar
la source
0

Supprimer une notification

Les notifications restent visibles jusqu'à ce que l'un des événements suivants se produise:

  1. L'utilisateur rejette la notification.
  2. L'utilisateur clique sur la notification et vous avez appelé setAutoCancel () lorsque vous avez créé la notification.
  3. Vous appelez cancel () pour un ID de notification spécifique. Cette méthode supprime également les notifications en cours.
  4. Vous appelez cancelAll (), qui supprime toutes les notifications que vous avez émises précédemment.
  5. Si vous définissez un délai lors de la création d'une notification à l'aide de setTimeoutAfter (), le système annule la notification une fois la durée spécifiée écoulée. Si nécessaire, vous pouvez annuler une notification avant l'expiration du délai spécifié.

Pour plus de détails, voir: https://developer.android.com/training/notify-user/build-notification?hl=en

ange
la source