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)


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

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.


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

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.


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


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

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


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

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

0

Wystarczy zadzwonić na ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.