La notifica Android non scompare dopo aver fatto clic sulla notifica


133

In caso di problemi con una notifica, voglio mostrarlo nella barra delle notifiche. Anche se ho impostato il flag di Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELnotifica sulla notifica non scompare dopo aver fatto clic su di essa. Qualche idea su cosa sto facendo di sbagliato?

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

Risposte:


305

Durante la costruzione Notificationda NotificationBuilderte puoi usare notificationBuilder.setAutoCancel(true);.


2
Quindi, quali differenze creano la notifica usando Notification mNotificationManager.notify(1,notification);e usando NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Grazie.
Yohanes AI

9
Questa risposta dovrebbe essere accettata, è più in linea con l'attuale dottrina del design Android
jmaculate

Questa risposta è corretta Uno accettato funziona ma non sempre. C'è un problema quando ci sono notifiche in pila su GCM (o qualunque cosa tu stia usando). Una volta eseguito il ping del server di notifica, viene restituito un numero elevato di notifiche e, a volte, viene riprodotto semplicemente l'aspetto della notifica.
Nikola Milutinovic,

5
notificationBuilder.setAutoCancel(true);non funziona per me. Devo mettere prima il mio intento in sospeso?
Kairi San

129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Dalla documentazione:

Bit da bit a bit o inserito nel campo flag che deve essere impostato se la notifica deve essere annullata quando viene cliccata dall'utente


3
Questa non è la risposta corretta Notification.DEFAULT_LIGHTSfa parte della Notification.defaultsclasse, non della Notification.flagsclasse. Vedi la mia risposta per i setter appropriati.
Darcy

notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; questo metodo funziona grazie synic.
Ravikumar11,

1
Il codice in questa risposta ha comportato la riproduzione del suono di notifica più volte. Guarda le altre risposte.
divieto di geoingegneria il

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;

1
Ho esaminato i documenti Android. Non capisco bene quando usare le bandiere. Perché non è solo notification.defaults = notification.DEFAULT_LIGHTS abbastanza per mostrare le luci. Perché la vibrazione e il suono funzionano senza la bandiera.
Ashwin,

Sto usando NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("New Tweet") .setContentText ("Ci sono" + count + "tweet") ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph,



1

Usa il flag 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;

e per avviare l'app:

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

0

Rimuovi una notifica

Le notifiche rimangono visibili fino a quando si verifica una delle seguenti condizioni:

  1. L'utente rifiuta la notifica.
  2. L'utente fa clic sulla notifica e hai chiamato setAutoCancel () quando hai creato la notifica.
  3. Si chiama cancel () per un ID di notifica specifico. Questo metodo elimina anche le notifiche in corso.
  4. Chiama cancelAll (), che rimuove tutte le notifiche precedentemente emesse.
  5. Se si imposta un timeout durante la creazione di una notifica utilizzando setTimeoutAfter (), il sistema annulla la notifica allo scadere della durata specificata. Se necessario, è possibile annullare una notifica prima della scadenza del periodo di timeout specificato.

Per maggiori dettagli, consultare: https://developer.android.com/training/notify-user/build-notification?hl=en

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.