Usuń powiadomienie po kliknięciu

120

Chcę, aby powiadomienie zostało zamknięte po kliknięciu przez użytkownika. Widziałem, że wszyscy mówią o używaniu flag, ale nie mogę ich nigdzie znaleźć, ponieważ używam klasy NotificationCompat.Builder, a nie klasy Notification. Ktoś ma pomysł, jak samodzielnie usunąć powiadomienie?
Oto mój kod, kiedy ustawiam powiadomienie:

NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("New Question")
            .setContentText("" + QuestionData.getAuthor().getUserName() + ": " + QuestionData.getQuestion() + "");

    Intent openHomePageActivity = new Intent("com.example.ihelp.HOMEPAGEACTIVITY");
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntent(openHomePageActivity);

    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(
                0,
                PendingIntent.FLAG_UPDATE_CURRENT
            );
    mBuilder.setContentIntent(resultPendingIntent);
    NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);       

    mNotificationManager.notify(0, mBuilder.build());
Yossi Zloof
źródło

Odpowiedzi:

325

Łatwo, po prostu nazwij to:

mBuilder.setAutoCancel(true);

Ponadto, chociaż nie jest to naprawdę konieczne, jeśli naprawdę chcesz użyć FLAG_AUTO_CANCEL, po prostu zadzwoń do tego, zanim zadzwonisz mNotificationManager.notify:

mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;
ingh.am
źródło
2
To najlepsza odpowiedź… flaga_auto_cancel nie działała… uratowałeś mi dzień!
allemattio
16
getNotificationsjest przestarzałe, użyj: mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;zamiast
blueware
Funkcja mBuilder.build () również jest przestarzała
Mansuu ....
2
kiedy stukam w powiadomienie, to setAutoCancel (true) rzeczywiście działa. ALE kiedy klikam Akcję w powiadomieniu (zadzwoń w moim przypadku), NIE DZIAŁA!
Async
1
Zobacz moje pytanie tutaj: stackoverflow.com/questions/37595594/…
Async-
18

Spróbuj tego....

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

 ..........
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.push_notify_icon)
            .setContentTitle("New Question!")
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setAutoCancel(true).setContentText("" + QuestionData.getAuthor().getUserName() + ": " + QuestionData.getQuestion() + "");
mBuilder.setContentIntent(contentIntent);

    ..............        


mBuilder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
mNotificationManager.notify(0, mBuilder.build());
Silambarasan Poonguti
źródło
1
.getNotification()jest przestarzałe, teraz użyj .build()zamiast niegomBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;
Shylendra Madda
9

Oto powiadomienie:

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_calendar)
            .setContentTitle("My Firebase Push notification")
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(soundUri)
            .setContentIntent(pendingIntent);

kluczem do anulowania kliknięcia jest:

            .setAutoCancel(true)

mam nadzieję, że to rozwiązuje sprawę.

Ali Nawaz
źródło
1

W Kotlinie możesz użyć:

mBuilder.build().flags.and(Notification.FLAG_AUTO_CANCEL)
Ricardo
źródło