Повідомлення 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());? Дякую.
Йоханес 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класом. Дивіться мою відповідь на відповідні сетери.
Дарсі

notifikacija.flags = Повідомлення.DEFAULT_LIGHTS | Повідомлення.FLAG_AUTO_CANCEL; цей метод працює спасибі синік.
Ravikumar11

1
Код у цій відповіді призвів до того, що звук сповіщення відтворювався кілька разів. Перегляньте інші відповіді.
заборона-геоінженерія

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. Я не дуже розумію, коли потрібно використовувати прапори. Чому не достатньо лише сповіщення.defaults = notification.DEFAULT_LIGHTS достатньо, щоб показати світло. Тому що вібрація і звук працюють без прапора.
Ешвін

Я використовую NotificationBuilder, NotificationCompat.Builder mBuilder = новий NotificationCompat.Builder (це) .setSmallIcon (android.R.dravable.ic_popup_sync) .setContentTitle ("Новий твіт") .setContentText ("Є" + count + "tweets ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Йосиф



1

Скористайтеся сповіщенням прапора.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. Ви зателефонуєте скасувати () для конкретного ідентифікаційного повідомлення. Цей метод також видаляє поточні сповіщення.
  4. Ви дзвоните cancelAll (), що видаляє всі попередні сповіщення.
  5. Якщо встановити тайм-аут під час створення сповіщення за допомогою setTimeoutAfter (), система скасовує сповіщення після закінчення зазначеної тривалості. Якщо потрібно, ви можете скасувати сповіщення до закінчення вказаної тривалості очікування.

Детальніше див: https://developer.android.com/training/notify-user/build-notification?hl=uk

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.