it-swarm.com.ru

Как убрать уведомление в Android

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

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

88
rahul

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

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

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

215
Janusz

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

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

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

41
Chuck C.

Поскольку никто не опубликовал кодовый ответ на это:

notification.flags = Notification.FLAG_AUTO_CANCEL;

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

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

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

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

13
Rohit Suthar

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

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

3
sandalone
 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)

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

3
Neeraj Singh

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

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}
1
Alejandro Casanova
    // Get a notification builder that's compatible with platform versions
    // >= 4
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this);
    builder.setSound(soundUri);
    builder.setAutoCancel(true);

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

1
user2962552
   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

1
Dhina k

Все уведомления (даже уведомления других приложений) могут быть удалены путем прослушивания NotificationListenerService, как упомянуто в Реализация NotificationListenerService

В сервисе вы должны позвонить cancelAllNotifications().

Служба должна быть включена для вашего приложения через:

«Приложения и уведомления» -> «Доступ к специальным приложениям» -> «Доступ к уведомлениям».

0
Samantha

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Потом выдача

notificationManager.cancel(NOTIFICATION_ID);

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

stopForeground( true );

изнутри сервиса вернуть его в фоновый режим и одновременно отменить уведомления. Кроме того, вы можете нажать его в фоновом режиме, не отменяя уведомление, а затем отменить уведомление.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
0
Ian Gough