Как очистить уведомление в Android

Можно ли программно очистить уведомление?

Я попробовал его с NotificationManager, но не работал. Есть ли другой способ, которым я могу это сделать?

Ответ 1

Используйте следующий код для отмены уведомления:

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

В этом коде всегда используется один и тот же идентификатор, используемый для уведомлений. Если у вас есть разные уведомления, которые необходимо отменить, вам нужно сохранить идентификаторы, которые вы использовали для создания Уведомления.

Ответ 2

От: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Чтобы очистить уведомление о статусной строке, когда пользователь выбирает ее из окна Уведомления, добавьте флаг "FLAG_AUTO_CANCEL" в объект "Уведомление". Вы также можете очистить его вручную с помощью cancel (int), передав ему идентификатор уведомления или очистить все ваши уведомления с помощью cancelAll().

Но Дональд прав, вы можете только очистить уведомления, которые вы создали.

Ответ 3

Поскольку ни один из них не отправил ответ на этот код:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. и если у вас уже есть флаги, вы можете ИЛИ FLAG_AUTO_CANCEL:

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;

Ответ 4

Начиная с уровня 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());
}

Ответ 5

Попробуйте метод по умолчанию, указанный в NotificationManager.

NotificationManager.cancelAll(), чтобы удалить все уведомления. NotificationManager.cancel(notificationId), чтобы удалить определенное уведомление.

Ответ 6

Если вы используете 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() устарел!!!

Ответ 8

Фактически, как было сказано перед тем, как начинать с уровня API 18, вы можете отменить уведомления, опубликованные другими приложениями, чем ваши собственные, используя NotificationListenerService, но этот подход больше не будет работать на Lollipop, вот способ удалить уведомления, охватывающие также Lillipop API.

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}

Ответ 9

Если вы генерируете уведомление из службы, запущенной на переднем плане, используя

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Затем выдача

notificationManager.cancel(NOTIFICATION_ID);

не отменяет Уведомление, и уведомление все равно появляется в строке состояния. В этом конкретном случае вам нужно будет выпустить

stopForeground( true );

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

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);

Ответ 10

 Notification mNotification = new Notification.Builder(this)

                .setContentTitle("A message from: " + fromUser)
                .setContentText(msg)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.app_icon)
                .setContentIntent(pIntent)
                .build();

.setAutoCancel(истина)

когда вы нажимаете на уведомление, открываете соответствующую активность и удаляете уведомление из панели уведомлений

Ответ 11

    // Get a notification builder that compatible with platform versions
    // >= 4
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this);
    builder.setSound(soundUri);
    builder.setAutoCancel(true);

это работает, если вы используете построитель уведомлений...