Удалить уведомление после нажатия

120

Я хочу, чтобы уведомление закрывалось после того, как пользователь щелкнул по нему. Я видел, что все говорят использовать флаги, но я нигде не могу найти флаги, потому что я использую класс NotificationCompat.Builder, а не класс Notification. Кто-нибудь знает, как самостоятельно убрать уведомление?
Вот мой код, когда я устанавливаю уведомление:

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());
Йоси Злооф
источник

Ответы:

325

Легко, просто назовите это:

mBuilder.setAutoCancel(true);

Кроме того, хотя в этом нет необходимости, но если вы действительно хотите использовать FLAG_AUTO_CANCEL, просто вызовите это перед вызовом mNotificationManager.notify:

mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;
ingh.am
источник
2
Это лучший ответ .. flag_auto_cancel не работал .. ты спас мне день!
allemattio 03
16
getNotificationsустарело, используйте: mBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;вместо
blueware
mBuilder.build () также устарел
Mansuu .... 01
2
когда я нажимаю на уведомление, этот setAutoCancel (true) действительно работает. НО когда я нажимаю Action в уведомлении (call в моем случае), оно НЕ РАБОТАЕТ!
Async
1
См. Мой вопрос здесь: stackoverflow.com/questions/37595594/…
Async
18

Попробуй это....

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());
Силамбарасан Поонгути
источник
1
.getNotification()устарело, теперь используйте .build()вместо этого какmBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL;
Шилендра Мадда
9

Вот уведомление:

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

ключ к отмене при нажатии:

            .setAutoCancel(true)

Надеюсь, это решит проблему.

Али Наваз
источник
1

В котлине можно использовать:

mBuilder.build().flags.and(Notification.FLAG_AUTO_CANCEL)
Рикардо
источник