Die Android-Benachrichtigung verschwindet nicht, nachdem Sie auf die Benachrichtigung geklickt haben

132

Wenn Sie Probleme mit einer Benachrichtigung haben, möchte ich diese in der Benachrichtigungsleiste anzeigen. Obwohl ich das Benachrichtigungsflag auf Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELdie Benachrichtigung gesetzt habe, verschwindet es nicht, nachdem ich darauf geklickt habe. Irgendwelche Ideen, was ich falsch mache?

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
quelle

Antworten:

304

Während Gebäude Notificationdurch NotificationBuilderdie Sie verwenden können notificationBuilder.setAutoCancel(true);.

Kamil Lelonek
quelle
2
Welche Unterschiede führen zu einer Benachrichtigung mithilfe von Notification mNotificationManager.notify(1,notification);und NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Vielen Dank.
Yohanes AI
9
Diese Antwort sollte akzeptiert werden, sie entspricht eher der aktuellen Android-Design-Doktrin
jmaculate
Diese Antwort ist richtig. Akzeptiert funktioniert man aber nicht immer. Es gibt ein Problem, wenn gestapelte Benachrichtigungen in GCM (oder was auch immer Sie verwenden) vorhanden sind. Sobald Sie den Benachrichtigungsserver anpingen, wird er mit vielen Benachrichtigungen zurückgegeben und manchmal wird nur das Erscheinungsbild der Benachrichtigung wiederholt.
Nikola Milutinovic
5
notificationBuilder.setAutoCancel(true);arbeitet nicht für mich. Soll ich meine anstehende Absicht vorlegen?
Kairi San
129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Aus der Dokumentation:

Bit, das bitweise oder in das Flag- Feld eingefügt werden soll, das gesetzt werden soll, wenn die Benachrichtigung abgebrochen werden soll, wenn der Benutzer darauf klickt

synic
quelle
3
Dies ist nicht die richtige Antwort. Notification.DEFAULT_LIGHTSist Teil der Notification.defaultsKlasse, nicht der Notification.flagsKlasse. Siehe meine Antwort für die entsprechenden Setter.
Darcy
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; Diese Methode funktioniert danke Synchron.
Ravikumar11
1
Der Code in dieser Antwort führte dazu, dass der Benachrichtigungston mehrmals abgespielt wurde. Schauen Sie sich die anderen Antworten an.
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
quelle
1
Ich habe die Android-Dokumente durchgesehen. Ich verstehe nicht ganz, wann Flaggen verwendet werden sollen. Warum reicht nicht einfach notification.defaults = notification.DEFAULT_LIGHTS aus, um die Lichter anzuzeigen? Weil das Vibrieren und der Klang ohne die Flagge funktionieren.
Ashwin
Ich verwende den NotificationBuilder, NotificationCompat.Builder. ;; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph
2

Die Antwort für mich war zu verwenden mBuilder.setOngoing(false)

Maschinenstamm
quelle
1

Verwenden Sie das 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;

und um die App zu starten:

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
quelle
0

Entfernen Sie eine Benachrichtigung

Benachrichtigungen bleiben sichtbar, bis eine der folgenden Aktionen ausgeführt wird:

  1. Der Benutzer schließt die Benachrichtigung ab.
  2. Der Benutzer klickt auf die Benachrichtigung und Sie haben setAutoCancel () aufgerufen, als Sie die Benachrichtigung erstellt haben.
  3. Sie rufen cancel () für eine bestimmte Benachrichtigungs-ID auf. Diese Methode löscht auch laufende Benachrichtigungen.
  4. Sie rufen cancelAll () auf, wodurch alle zuvor ausgegebenen Benachrichtigungen entfernt werden.
  5. Wenn Sie beim Erstellen einer Benachrichtigung mit setTimeoutAfter () ein Zeitlimit festlegen, bricht das System die Benachrichtigung nach Ablauf der angegebenen Dauer ab. Bei Bedarf können Sie eine Benachrichtigung abbrechen, bevor die angegebene Zeitüberschreitungsdauer abgelaufen ist.

Weitere Informationen finden Sie unter: https://developer.android.com/training/notify-user/build-notification?hl=de

Engel
quelle