Powiadomienie na Androida nie znika po kliknięciu powiadomienia

134

Jeśli masz problemy z powiadomieniem, które chcę pokazać na pasku powiadomień. Chociaż ustawiłem flagę powiadomienia, aby Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELpowiadomienie nie znikało po kliknięciu. Jakieś pomysły, co robię źle?

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
źródło

Odpowiedzi:

307

Chociaż budynek Notificationprzez NotificationBuilderCiebie mogą korzystać notificationBuilder.setAutoCancel(true);.

Kamil Lelonek
źródło
2
Jakie więc różnice tworzą powiadomienia przy użyciu Notification mNotificationManager.notify(1,notification);i NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Dzięki.
Yohanes AI
9
Ta odpowiedź powinna zostać zaakceptowana, jest bardziej zgodna z aktualną doktryną projektowania Androida
Jmaculate
Ta odpowiedź jest poprawna. Zaakceptowany jeden działa, ale nie zawsze. Występuje problem, gdy w GCM (lub czymkolwiek innym, czego używasz), są ułożone powiadomienia. Gdy pingujesz serwer powiadomień, wraca on z dużą ilością powiadomień, a czasami po prostu zapętla wygląd powiadomienia.
Nikola Milutinovic
5
notificationBuilder.setAutoCancel(true);nie działa dla mnie. Czy powinienem umieścić przed moim oczekującym zamiarem?
Kairi San
129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Z dokumentacji:

Bit, który ma być bitowy lub wpisany w pole flagi, które należy ustawić, jeśli powiadomienie powinno zostać anulowane po kliknięciu przez użytkownika

synic
źródło
3
To nie jest poprawna odpowiedź. Notification.DEFAULT_LIGHTSjest częścią Notification.defaultsklasy, a nie Notification.flagsklasy. Zobacz moją odpowiedź dla odpowiednich seterów.
Darcy
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; ta metoda działa, dziękuję synic.
Ravikumar11
1
Kod w tej odpowiedzi spowodował wielokrotne odtwarzanie dźwięku powiadomienia. Sprawdź inne odpowiedzi.
zakaz geoinżynierii
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
źródło
1
Przejrzałem dokumentację Androida. Nie do końca rozumiem, kiedy należy używać flag. Dlaczego tylko notification.defaults = notification.DEFAULT_LIGHTS nie wystarczy, aby włączyć światła. Ponieważ wibracje i dźwięk działają bez flagi.
Ashwin
Używam NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("New Tweet") .setContentText ("There are" + count) text ("There are" + count) ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph
2

Odpowiedzią dla mnie było użycie mBuilder.setOngoing(false)

Plemię maszyn
źródło
1

Użyj flagi 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;

i aby uruchomić aplikację:

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
źródło
0

Usuń powiadomienie

Powiadomienia pozostają widoczne, dopóki nie nastąpi jedna z następujących sytuacji:

  1. Użytkownik odrzuca powiadomienie.
  2. Użytkownik klika powiadomienie i podczas tworzenia powiadomienia wywołujesz funkcję setAutoCancel ().
  3. Wywołujesz anulowanie () dla określonego identyfikatora powiadomienia. Ta metoda usuwa również trwające powiadomienia.
  4. Wywołujesz funkcję cancelAll (), która usuwa wszystkie uprzednio wydane powiadomienia.
  5. Jeśli ustawisz limit czasu podczas tworzenia powiadomienia za pomocą metody setTimeoutAfter (), system anuluje powiadomienie po upływie określonego czasu. W razie potrzeby możesz anulować powiadomienie przed upływem określonego limitu czasu.

Aby uzyskać więcej informacji, zobacz: https://developer.android.com/training/notify-user/build-notification?hl=en

Anioł
źródło