Можно ли программно очистить уведомление?
Я пробовал это с, 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» в свой объект уведомления. Вы также можете очистить его вручную с помощью cancel (int), передав ему идентификатор уведомления, или очистить все свои уведомления с помощью cancelAll ().
Но Донал прав, очистить можно только созданные вами уведомления.
Поскольку никто не опубликовал код ответа на это:
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 (истина)
когда вы нажимаете на уведомление, откройте соответствующее действие и удалите уведомление из панели уведомлений
Если вы генерируете уведомление из службы, которая запускается на переднем плане, используя
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, вот способ удалить уведомления, охватывающие также Lillipop API.
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 и обратной совместимости. Лучший способ сделать это (Kotlin и Java) - это сделать так:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Или отменить все уведомления:
NotificationManagerCompat.from(context).cancelAll()
Сделано для AndroidX или библиотек поддержки.