È possibile cancellare una notifica in modo programmatico?
L'ho provato con NotificationManager
ma non funziona. C'è un altro modo in cui posso farlo?
È possibile cancellare una notifica in modo programmatico?
L'ho provato con NotificationManager
ma non funziona. C'è un altro modo in cui posso farlo?
Risposte:
Utilizza il codice seguente per annullare una notifica:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
In questo codice c'è sempre lo stesso id usato per le notifiche. Se hai diverse notifiche che devono essere cancellate, devi salvare gli ID che hai usato per creare la notifica.
setContentText
) anche se ho impostato la priorità su 2. Qualche suggerimento?
Da: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Per cancellare la notifica dalla barra di stato quando l'utente la seleziona dalla finestra Notifiche, aggiungi il flag "FLAG_AUTO_CANCEL" all'oggetto Notifica. Puoi anche cancellarlo manualmente con cancel (int), passandogli l'ID di notifica o cancellare tutte le tue notifiche con cancelAll ().
Ma Donal ha ragione, puoi cancellare solo le notifiche che hai creato.
Dal momento che nessuno ha pubblicato una risposta in codice a questo:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. e se hai già flag, puoi OR FLAG_AUTO_CANCEL in questo modo:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Prova il metodo predefinito fornito in NotificationManager .
NotificationManager.cancelAll()
per rimuovere tutte le notifiche.
NotificationManager.cancel(notificationId)
per rimuovere una particolare notifica.
cancel
metodo, il cancel
metodo non è statico, quindi è necessaria un'istanza NotificationManager
come questa: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Quindi puoi chiamare notificationManager.cancel(notificationId);
come Rohit Suthar a cui fa riferimento nella sua risposta. notificationId
è semplicemente l'ID a cui sei passatonotificationManager.notify(notificationId, mNotification)
A partire dal livello API 18 (Jellybean MR2) è possibile annullare notifiche diverse dalla propria tramite NotificationListenerService.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}
...
private void clearNotificationExample(StatusBarNotification sbn) {
myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
Notification mNotification = new Notification.Builder(this)
.setContentTitle("A message from: " + fromUser)
.setContentText(msg)
.setAutoCancel(true)
.setSmallIcon(R.drawable.app_icon)
.setContentIntent(pIntent)
.build();
.setAutoCancel (true)
quando fai clic sulla notifica, apri l'attività corrispondente e rimuovi la notifica dalla barra delle notifiche
Se si generano notifiche da un servizio avviato in primo piano utilizzando
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Quindi emissione
notificationManager.cancel(NOTIFICATION_ID);
non finisce per annullare la notifica e la notifica appare ancora nella barra di stato. In questo caso particolare, dovrai emettere
stopForeground( true );
dall'interno del servizio per rimetterlo in background e contemporaneamente annullare le notifiche. In alternativa, puoi spostarlo in background senza dover annullare la notifica e quindi annullare la notifica.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Se stai usando NotificationCompat.Builder
(una parte di android.support.v4
), chiama semplicemente il metodo del suo oggettosetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Alcuni ragazzi stavano segnalando che setAutoCancel()
non funzionava per loro, quindi puoi provare anche in questo modo
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Nota che il metodo getNotification()
è stato deprecato !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
funziona se stai usando un generatore di notifiche ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
per ulteriori riferimenti fare clic qui http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
In realtà, come risposto prima di iniziare con il livello API 18, puoi annullare le notifiche pubblicate da altre app in modo diverso dalla tua utilizzando NotificationListenerService ma quell'approccio non funzionerà più su Lollipop, ecco il modo per rimuovere le notifiche che coprono anche l'API Lillipop.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
che cos'è?
Tutte le notifiche (anche altre notifiche delle app) possono essere rimosse ascoltando "NotificationListenerService" come indicato in NotificationListenerService Implementation
Nel servizio devi chiamare cancelAllNotifications()
.
Il servizio deve essere abilitato per la tua applicazione tramite:
"App e notifiche" -> "Accesso speciale alle app" -> "Accesso alle notifiche".
questo codice ha funzionato per me:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}
Credo il più RECENTE e AGGIORNATO per AndroidX e compatibilità con le versioni precedenti. Il modo migliore per farlo (Kotlin e Java) dovrebbe essere fatto come:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Oppure per annullare tutte le notifiche è:
NotificationManagerCompat.from(context).cancelAll()
Realizzato per AndroidX o librerie di supporto.