Чи можливо очистити сповіщення програмно?
Я спробував це з, NotificationManager
але це не працює. Чи є інший спосіб, я можу це зробити?
Чи можливо очистити сповіщення програмно?
Я спробував це з, NotificationManager
але це не працює. Чи є інший спосіб, я можу це зробити?
Відповіді:
Використовуйте наступний код, щоб скасувати Повідомлення:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
У цьому коді завжди є той самий ідентифікатор, який використовується для сповіщень. Якщо у вас є різні сповіщення, які потрібно скасувати, вам потрібно зберегти ідентифікатори, які ви використовували для створення Повідомлення.
setContentText
), хоча я визначаю пріоритет 2. Будь-які пропозиції?
Від: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Щоб очистити сповіщення в рядку стану, коли користувач вибирає його у вікні сповіщень, додайте прапор «FLAG_AUTO_CANCEL» до об’єкта сповіщень. Ви також можете очистити його вручну, скасувавши (int), передавши йому ідентифікатор сповіщення або очистити всі свої сповіщення за допомогою cancelAll ().
Але Donal вірно, ви можете очистити лише створені вами сповіщення.
Оскільки ніхто не опублікував кодову відповідь на це:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. і якщо у вас вже є прапори, ви можете АБО FLAG_AUTO_CANCEL так:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Спробуйте метод за замовчуванням, наданий у NotificationManager .
NotificationManager.cancelAll()
щоб видалити всі сповіщення.
NotificationManager.cancel(notificationId)
щоб видалити певне сповіщення.
cancel
методу, cancel
метод не є статичним, тому вам потрібен такий приклад NotificationManager
: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Тоді ви можете зателефонувати на notificationManager.cancel(notificationId);
зразок Рохіта Сутара, на який посилається у своїй відповіді. notificationId
це просто ідентифікатор, на який ви перейшлиnotificationManager.notify(notificationId, mNotification)
Починаючи з API рівня 18 (Jellybean MR2), ви можете скасувати інші сповіщення, крім власних, за допомогою NotificationListenerService.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}
...
private void clearNotificationExample(StatusBarNotification sbn) {
myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
Notification mNotification = new Notification.Builder(this)
.setContentTitle("A message from: " + fromUser)
.setContentText(msg)
.setAutoCancel(true)
.setSmallIcon(R.drawable.app_icon)
.setContentIntent(pIntent)
.build();
.setAutoCancel (true)
натиснувши на сповіщення, відкрийте відповідну діяльність та видаліть сповіщення з панелі сповіщень
Якщо ви створюєте сповіщення від служби, яка запускається на передньому плані за допомогою
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Потім видача
notificationManager.cancel(NOTIFICATION_ID);
не скасовує сповіщення, і сповіщення все ще з’являється у рядку стану. У цьому конкретному випадку вам потрібно буде видати
stopForeground( true );
зсередини послуги, щоб повернути її у фоновий режим і одночасно скасувати сповіщення. Ви також можете натиснути його на другий план, не скасовуючи повідомлення, а потім скасувати повідомлення.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Якщо ви використовуєте NotificationCompat.Builder
(частину android.support.v4
), тоді просто викличте метод його об'єктаsetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Деякі хлопці повідомляли, що setAutoCancel()
це не працює для них, тож ви можете спробувати і цей спосіб
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Зауважте, що метод getNotification()
застарілий !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
це працює, якщо ви використовуєте конструктор сповіщень ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
Для отримання більш довідкової інформації натисніть тут http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Насправді, як відповіли перед початком API рівня 18, ви можете скасувати повідомлення, розміщені іншими програмами, відмінними від ваших власних, використовуючи NotificationListenerService, але такий підхід більше не працюватиме на Lollipop, ось спосіб видалення сповіщень, що охоплюють також API Lillipop.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
що це?
Усі сповіщення (навіть інші сповіщення про додатки) можна видалити, прослухавши "NotificationListenerService", як зазначено у впровадженні NotificationListenerService
У службі вам потрібно зателефонувати cancelAllNotifications()
.
Служба повинна бути включена для вашої програми через:
"Додатки та сповіщення" -> "Спеціальний доступ до додатків" -> "Доступ до сповіщень".
цей код працював для мене:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}
Я вважаю , що саме ОСТАННЄ і ОНОВЛЕНО для AndroidX і зворотної сумісності. Найкращий спосіб (Котлін та Ява) це слід робити так:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Або скасувати всі сповіщення:
NotificationManagerCompat.from(context).cancelAll()
Створено для AndroidX або бібліотек підтримки.