Android: usuń powiadomienie z paska powiadomień

Odpowiedzi:

182

To jest całkiem proste. Musisz zadzwonić cancellub skorzystać cancelAllz NotificationManager. Parametrem metody anuluj jest identyfikator powiadomienia, które ma zostać anulowane.

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

RoflcoptrException
źródło
Dzięki Roflcoptr :) Znalazłem to tutaj: stackoverflow.com/questions/2839727/…
Nezir
3
prywatne statyczne końcowe int MY_NOTIFICATION_ID = 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, powiadomienie); Przykładowy kod nie jest kompletny. To zależy od tego, jak utworzyłeś swoje powiadomienie. Po prostu upewnij się, że używasz tego samego identyfikatora, aby anulować powiadomienie, którego użyłeś podczas tworzenia powiadomienia. Aby anulować: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir
Uratowałeś dzień !, to przyjemność czytać ludzi takich jak Ty, mimo że nie są to skomplikowane odpowiedzi na złożone problemy, ludzie tacy jak Ty bardzo nam pomagają w trudnych czasach. Dziękuję Ci bardzo.
e-info128
public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). cancel (id);}
phnghue
1
co z tymi powiadomieniami, które są tworzone przez system?
Zaid Mirza
219

Możesz wypróbować ten szybki kod

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
Ankit Patial
źródło
19
To powinna być poprawna odpowiedź, ponieważ jest prosta, poprawna i prowadzi bezpośrednio do sedna.
ZeroTek,
1
Cześć, to jest poprawna odpowiedź. Ale pasek powiadomień pozostaje widoczny. Czy jest jakiś sposób, aby to również ukryć? Na przykład mam dwie czynności związane z powiadomieniem: anuluj i gotowe. Po wykonaniu jednej z tych czynności usuwam powiadomienie. Ale robi to tylko usuwa powiadomienie, ale pasek powiadomień pozostaje widoczny.
Shajeel Afzal
1
1 Linia, po prostu zadzwoń na identyfikator powiadomienia: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue
nie potrzebujesz ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax
61

Możesz także zadzwonić cancelAlldo menedżera powiadomień, więc nie musisz się nawet martwić o identyfikatory powiadomień.

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

EDYCJA: zostałem odrzucony, więc może powinienem sprecyzować, że spowoduje to tylko usunięcie powiadomienia z twojej aplikacji.

Stephane Mathis
źródło
nie ma menedżera powiadomień dla pierwszego planu:startForeground(NOTIFICATION_ID, mNotification);
user924
12

po prostu ustaw setAutoCancel (True) jak w poniższym kodzie:

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
źródło
3
Działa to tylko wtedy, gdy bezpośrednio dotkniesz powiadomienia. Stuknięcie w akcję (jak tutaj: pl.vc/1gvrli ) nie usuwa powiadomienia.
baris1892,
Nie o to pytano. Pytanie: „Potrzebuję przykładu, jak usunąć to powiadomienie z paska powiadomień w wydarzeniu?”
David,
12

to pomoże:

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

powinno to usunąć wszystkie powiadomienia wysłane przez aplikację

i jeśli utworzysz powiadomienie dzwoniąc

startForeground();

być może będziesz musiał zadzwonić

stopForeground(false);

najpierw, a następnie anuluj powiadomienie.

pilotmario
źródło
Jeśli to możliwe, czy możesz odpowiedzieć również na to pytanie? Zrobiłem to samo, co sugerowałeś, ale nie działa to dla mnie na Androidzie 10. Kliknij tutaj, aby uzyskać pytanie
Maulik Dodia
7

Jeśli generujesz powiadomienie z usługi, która jest uruchamiana na pierwszym planie przy użyciu

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Następnie wydawanie

notificationManager.cancel(NOTIFICATION_ID);

nie działa anulowanie Powiadomienia i powiadomienia nadal pojawiają się na pasku stanu. W tym konkretnym przypadku możesz rozwiązać te problemy na dwa sposoby:

1> Używanie stopForeground (false) inside service:

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

2> Zniszcz tę klasę usług za pomocą aktywności wywoływania:

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

Drugi sposób bardziej preferuje powiadomienia odtwarzacza muzyki, ponieważ dzięki temu można nie tylko usunąć powiadomienia, ale także usunąć odtwarzacz ... !!

Dhruv Raval
źródło
Dziękuję za odpowiedź! Użycie stopForeground(true); manager.cancelAll();jest tym, co dla mnie rozwiązało!
chenshuiluke
3

Spróbuj tego,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
Akansha patel
źródło
Jeśli to możliwe, czy możesz odpowiedzieć również na to pytanie? Zrobiłem to samo, co sugerowałeś, ale nie działa to dla mnie na Androidzie 10. Kliknij tutaj, aby uzyskać pytanie
Maulik Dodia
2

Użyj NotificationManager, aby anulować powiadomienie. Musisz tylko podać swój identyfikator powiadomienia

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

sprawdź także ten link Zobacz link programisty

Muhammad Usman Ghani
źródło
2

NotificationManager.cancel(id)to poprawna odpowiedź. Możesz jednak usunąć powiadomienia w Androidzie Oreo i późniejszych, usuwając cały kanał powiadomień. Powinno to usunąć wszystkie wiadomości z usuniętego kanału.

Oto przykład z dokumentacji Androida :

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
gil.fernandes
źródło
1

W Android API> = 23 możesz zrobić coś takiego, aby usunąć grupę powiadomień.

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }
Szabolcs Becze
źródło
0

Wystarczy zadzwonić na ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
phnghue
źródło