Android: удалить уведомление из панели уведомлений

166

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

Незир
источник
фрагмент кода см. в разделе « Удаление уведомлений»
Тофик Ахмад,

Ответы:

182

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

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

RoflcoptrException
источник
Спасибо Roflcoptr :) Я нашел это здесь: stackoverflow.com/questions/2839727/…
Nezir
3
приватный статический финал int MY_NOTIFICATION_ID = 1234; Строка ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, уведомление); Пример кода не завершен. Это зависит от того, как вы создали свое уведомление. Просто убедитесь, что вы используете тот же идентификатор, чтобы отменить уведомление, которое вы использовали при создании уведомления. Для отмены: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Незир
Вы спасли день!, Приятно читать таких людей, как вы, даже если они не являются сложными ответами на сложные вопросы, и такие люди, как вы, очень помогают нам в трудную минуту. Большое спасибо.
e-info128
public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). cancel (id);}
номер
1
как насчет тех уведомлений, которые создаются системой?
Заид Мирза
220

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

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
Анкит Патиал
источник
19
Это должен быть правильный ответ, потому что он прост, корректен и непосредственно подходит к делу.
ZeroTek
1
Привет, это правильный ответ. Но панель уведомлений остается видимой. Есть ли способ это скрыть? Например, у меня есть два действия, связанные с уведомлением: отмена и готово. Когда любое из этих действий предпринято, я удаляю уведомление. Но при этом он только удаляет уведомление, но панель уведомлений остается видимой.
Shajeel Afzal
1
1 строка, просто вызовите идентификатор уведомления: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
номер
вам не нужен CTX. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
Канбакс
61

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

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

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

Стефан Матис
источник
нет диспетчера уведомлений для переднего плана:startForeground(NOTIFICATION_ID, mNotification);
user924
12

просто установите 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());`
farhad.kargaran
источник
3
Это работает, только если вы нажмете на уведомление напрямую. Нажатие на действие (как здесь: pl.vc/1gvrli ) не удаляет уведомление.
baris1892
Это не то, что спросили. Вопрос: «Мне нужен пример, как удалить это уведомление из панели уведомлений о событии?»
Дэвид
12

это поможет:

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

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

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

startForeground();

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

stopForeground(false);

Сначала отмените уведомление.

pilotmario
источник
Если возможно, можете ли вы ответить на этот вопрос? Я сделал то же самое, что вы предложили, но он не работает для меня на Android 10. Щелкните здесь для вопроса
Maulik Dodia
7

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

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);

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

Дхрув Равал
источник
Спасибо за Ваш ответ! Использование stopForeground(true); manager.cancelAll();это то, что решило это для меня!
chenshuiluke
3

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

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
Аканша патель
источник
Если возможно, можете ли вы ответить на этот вопрос? Я сделал то же самое, что вы предложили, но он не работает для меня на Android 10. Щелкните здесь для вопроса
Maulik Dodia
2

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

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

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

Мухаммед Усман Гани
источник
2

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);
gil.fernandes
источник
1

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

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }
Сабольч Бече
источник
0

Просто позвоните ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
phnghue
источник