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

Odpowiedzi:


307

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


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


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;

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



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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.