Android: видаліть сповіщення з панелі сповіщень


166

Я створив додаток і за допомогою події мені вдається додати повідомлення в панель сповіщень для Android. Тепер мені потрібен зразок, як видалити це повідомлення з панелі сповіщень про подію ??



для деталі коду див. Видалення сповіщення
Tofeeq Ahmad

Відповіді:


182

Це досить просто. Вам потрібно зателефонувати cancelабо cancelAllна ваш NotificationManager. Параметр методу скасування - це ідентифікатор сповіщення, який слід скасувати.

Дивіться API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


Завдяки Roflcoptr :) Я знайшов його тут: stackoverflow.com/questions/2839727 / ...
Незірі

3
приватний статичний кінцевий int MY_NOTIFICATION_ID = 1234; Рядок ns = контекст.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)) Скасувати (id);}
phnghue

1
як щодо тих повідомлень, які створюються системою?
Заїд Мірза

219

Ви можете спробувати цей швидкий код

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)). Скасувати (id);}
phnghue

вам не потрібен ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax

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

3
Це працює лише в тому випадку, якщо ви натиснете сповіщення безпосередньо. Якщо натиснути дію (як тут: pl.vc/1gvrli ), сповіщення не видаляється.
baris1892

Це не те, про що питали. Питання: "Мені потрібен зразок, як видалити це повідомлення з панелі сповіщень про подію ??"
Девід

12

це допоможе:

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

це повинно видалити всі сповіщення, зроблені додатком

і якщо ви створите сповіщення, зателефонувавши

startForeground();

всередині сервісу. Можливо, вам доведеться зателефонувати

stopForeground(false);

спочатку скасуйте сповіщення.


Якщо можливо, ви можете відповісти і на це питання? Я зробив те саме, що ви запропонували, але це не працює для мене на Android 10. Клацніть тут, щоб поставити питання
Maulik Dodia

7

Якщо ви генеруєте сповіщення зі служби , запущеної на передньому плані, використовуючи

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Потім видача

notificationManager.cancel(NOTIFICATION_ID);

не працює, скасовуючи Повідомлення та сповіщення, все ще відображається в рядку стану. У цьому конкретному випадку ви вирішите це двома способами:

1> Використання stopForeground (помилково) всередині сервісу:

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();- це для мене це вирішило!
Ченшуйлуке

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.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

В Android API> = 23 ви можете зробити щось подібне, щоб видалити групу сповіщень.

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }

0

Просто ідентифікатор дзвінка:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.