Уведомление 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

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

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

synic
источник
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;
Darcy
источник
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);
Джозеф
2

Ответом для меня было использовать mBuilder.setOngoing(false)

Машинное Племя
источник
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.

ангел
источник