Android: удалить уведомление из панели уведомлений - PullRequest
150 голосов
/ 29 августа 2010

Я создал приложение, и с помощью события мне удается добавить уведомление в панели уведомлений Android. Теперь мне нужно образец, как удалить это уведомление из панели уведомлений о событии?

Ответы [ 11 ]

205 голосов
/ 20 декабря 2011

Вы можете попробовать этот быстрый код

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
162 голосов
/ 29 августа 2010

Это довольно просто. Вы должны позвонить cancel или cancelAll на свой NotificationManager. Параметр метода отмены - это идентификатор уведомления, которое должно быть отменено.

См. API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

60 голосов
/ 15 сентября 2014

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

NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();

РЕДАКТИРОВАТЬ: я был отклонен, поэтому, возможно, я должен указать, что это будет только удалить уведомление из вашего приложения.

10 голосов
/ 16 декабря 2014

просто установите setAutoCancel (True) как следующий код:

Intent resultIntent = new Intent(GameLevelsActivity.this, NotificationReceiverActivityAdv.class);

PendingIntent resultPendingIntent =
        PendingIntent.getActivity(
                GameLevelsActivity.this,
                0,
                resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
                );

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        getApplicationContext()).setSmallIcon(R.drawable.icon)
        .setContentTitle(adv_title)
        .setContentText(adv_desc)
        .setContentIntent(resultPendingIntent)
         //HERE IS WHAT YOY NEED:
        .setAutoCancel(true);

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(547, mBuilder.build());`
6 голосов
/ 03 июня 2017

это поможет:

NotificationManager mNotificationManager = (NotificationManager)
            getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.cancelAll();

это должно удалить все уведомления, сделанные приложением

и если вы создаете уведомление по телефону

startForeground();

внутри Сервиса. Возможно, вам придется позвонить

stopForeground(false);

сначала, затем отмените уведомление.

6 голосов
/ 29 февраля 2016

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Затем выдается

notificationManager.cancel(NOTIFICATION_ID);

не работает отмена Уведомление и уведомление по-прежнему отображается в строке состояния.В данном конкретном случае вы решите их двумя способами:

1> Использование stopForeground (false) внутри службы:

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

2> Уничтожитьэтот класс обслуживания с активностью вызова:

Intent i = new Intent(context, Service.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
if(ServiceCallingActivity.activity != null) {
    ServiceCallingActivity.activity.finish();
}
context.stopService(i);

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

1 голос
/ 06 апреля 2018

Пожалуйста, попробуйте это,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
1 голос
/ 10 февраля 2018

NotificationManager.cancel(id) - правильный ответ.Тем не менее, вы можете удалить в Android Oreo и более поздних уведомлениях, удалив весь канал уведомлений.Это должно удалить все сообщения в удаленном канале.

Вот пример из документации Android :

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
1 голос
/ 12 декабря 2017

В Android API> = 23 вы можете сделать что-то подобное, чтобы удалить группу уведомлений.

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }
1 голос
/ 25 февраля 2014

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

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

также проверить эту ссылку См. Ссылку для разработчиков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...