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


133

Если возникли проблемы с уведомлением, я хочу отобразить его на панели уведомлений. Хотя я установил флаг Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELуведомления, уведомление не исчезает после его нажатия. Есть идеи, что я делаю не так?

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

Ответы:


305

При строительстве Notificationна NotificationBuilderвы можете использовать notificationBuilder.setAutoCancel(true);.


2
Итак, какие различия создают уведомления с помощью Notification mNotificationManager.notify(1,notification);и NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Спасибо.
Yohanes AI

9
Этот ответ следует принять, он больше соответствует нынешней доктрине дизайна Android
jmaculate

Этот ответ правильный. Принято работает, но не всегда. Возникает проблема, когда в GCM (или чем-то еще, что вы используете) есть сложенные уведомления. Как только вы пингуетесь с сервером уведомлений, он возвращается с множеством уведомлений, а иногда просто зацикливает внешний вид уведомления.
Никола Милутинович

5
notificationBuilder.setAutoCancel(true);у меня не работает. Должен ли я поставить перед своим ожидающим намерением?
Кайри Сан

129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Из документации:

Бит, который должен быть побитовым или введен в поле флагов, который должен быть установлен, если уведомление должно быть отменено при нажатии пользователем.


3
Это не правильный ответ. Notification.DEFAULT_LIGHTSявляется частью Notification.defaultsкласса, а не Notification.flagsкласса. См. Мой ответ о подходящих сеттерах.
Darcy

notification.flags = Уведомление.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; этот метод работает спасибо synic.
Ravikumar11

1
Код в этом ответе привел к многократному воспроизведению звука уведомления. Ознакомьтесь с другими ответами.
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;

1
Я просмотрел документацию по Android. Я не совсем понимаю, когда следует использовать флаги. Почему не достаточно просто notification.defaults = notification.DEFAULT_LIGHTS, чтобы показать свет. Потому что вибрация и звук работают без флажка.
Эшвин

Я использую NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle («Новый твит») .setContentText («Есть» + количество) + «твитов» ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Джозеф



1

Используйте флаг 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;

и запустить приложение:

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

Удалить уведомление

Уведомления остаются видимыми, пока не произойдет одно из следующих действий:

  1. Пользователь отклоняет уведомление.
  2. Пользователь щелкает уведомление, и вы вызвали setAutoCancel () при создании уведомления.
  3. Вы вызываете cancel () для определенного идентификатора уведомления. Этот метод также удаляет текущие уведомления.
  4. Вы вызываете cancelAll (), который удаляет все ранее выпущенные уведомления.
  5. Если вы устанавливаете тайм-аут при создании уведомления с помощью setTimeoutAfter (), система отменяет уведомление по истечении указанного времени. При необходимости вы можете отменить уведомление до истечения указанного времени ожидания.

Подробнее см. Https://developer.android.com/training/notify-user/build-notification?hl=en.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.