Android: rimuove la notifica dalla barra delle notifiche


Risposte:


182

Questo è abbastanza semplice Devi chiamare cancelo cancelAllsul tuo NotificationManager. Il parametro del metodo di annullamento è l'ID della notifica che deve essere annullata.

Vedi l'API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


Grazie Roflcoptr :) ho trovato qui: stackoverflow.com/questions/2839727/...
Nezir

3
finale statico privato int MY_NOTIFICATION_ID = 1234; Stringa ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, notifica); Il codice di esempio non è completo. Dipende da come hai creato la tua notifica. Assicurati di utilizzare lo stesso ID per annullare la notifica che hai usato quando hai creato la notifica. Per annullare: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir,

Hai salvato la giornata!, Un piacere leggere persone come te, anche se non sono risposte complesse a problemi complessi che persone come te ci aiutano molto nei momenti difficili. Grazie mille.
e-info128,

public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). cancel (id);}
phnghue

1
che dire di quelle notifiche che vengono create dal sistema?
Zaid Mirza,

220

Puoi provare questo codice rapido

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}

19
Questa dovrebbe essere la risposta corretta perché è semplice, corretta e arriva direttamente al punto.
ZeroTek,

1
Ciao questa è la risposta corretta. Ma il vassoio di notifica rimane visibile. C'è un modo per nasconderlo anche? Ad esempio, ho due azioni associate alla notifica: Annulla e Fine. Quando viene intrapresa una di queste azioni, rimuovo la notifica. Ma facendo ciò rimuove solo la notifica ma il vassoio di notifica rimane visibile.
Shajeel Afzal,

1
1 riga, basta chiamare l'id di notifica: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue

non hai bisogno di CTX. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax,

61

Puoi anche chiamare cancelAllil gestore delle notifiche, quindi non devi nemmeno preoccuparti degli ID di notifica.

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

EDIT: sono stato sottoposto a downgrade, quindi forse dovrei specificare che questo rimuoverà solo la notifica dalla tua applicazione.


non esiste un gestore notifiche per il primo piano:startForeground(NOTIFICATION_ID, mNotification);
user924

12

imposta semplicemente setAutoCancel (True) come il seguente codice:

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
Funziona solo se tocchi direttamente la notifica. Toccando l'azione (come qui: pl.vc/1gvrli ) non si rimuove la notifica.
baris1892,

Non è quello che è stato chiesto. La domanda: "Ho bisogno di un esempio su come rimuovere quella notifica dalla barra di notifica su un evento ??"
David,

12

questo aiuterà:

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

questo dovrebbe rimuovere tutte le notifiche fatte dall'app

e se si crea una notifica chiamando

startForeground();

all'interno di un servizio potrebbe essere necessario chiamare

stopForeground(false);

prima di tutto, quindi annulla la notifica.


Se possibile, puoi rispondere anche a questa domanda? Ho fatto lo stesso che hai suggerito, ma non funziona per me su Android 10. Fai clic qui per la domanda
Maulik Dodia,

7

Se si sta generando una notifica da un servizio avviato in primo piano utilizzando

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Quindi emissione

notificationManager.cancel(NOTIFICATION_ID);

non funziona annullando la notifica e la notifica appare ancora nella barra di stato. In questo caso particolare, li risolverai in 2 modi:

1> Utilizzo del servizio di stopForeground (false) all'interno:

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

2> Distruggi quella classe di servizio con l'attività chiamante:

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

Il secondo modo preferisce di più nella notifica del lettore musicale perché in questo modo non solo la notifica rimuove ma rimuove anche il lettore ... !!


Grazie per la tua risposta! L'utilizzo stopForeground(true); manager.cancelAll();è ciò che ha risolto per me!
chenshuiluke

3

Per favore prova questo,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}

Se possibile, puoi rispondere anche a questa domanda? Ho fatto lo stesso che hai suggerito, ma non funziona per me su Android 10. Fai clic qui per la domanda
Maulik Dodia,


2

NotificationManager.cancel(id)è la risposta corretta. Tuttavia puoi rimuovere in Android Oreo e le notifiche successive eliminando l'intero canale di notifica. Questo dovrebbe eliminare tutti i messaggi nel canale eliminato.

Ecco l'esempio dalla documentazione di Android :

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);

1

Sull'API Android> = 23 puoi fare qualcosa del genere per rimuovere un gruppo di notifiche.

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

0

Basta chiamare l'ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.