Android: eliminar notificaciones de la barra de notificaciones

Respuestas:

182

Esto es bastante simple Tiene que llamar cancelo cancelAllen su NotificationManager. El parámetro del método de cancelación es el ID de la notificación que debe cancelarse.

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

RoflcoptrException
fuente
Gracias Roflcoptr :) Lo encontré aquí: stackoverflow.com/questions/2839727/…
Nezir
3
privado estático final int MY_NOTIFICATION_ID = 1234; Cadena ns = Contexto.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, notificación); El código de ejemplo no está completo. Depende de cómo haya creado su notificación. Solo asegúrese de usar la misma identificación para cancelar su notificación que utilizó cuando creó su notificación. Para cancelar: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir
¡Salvaste el día!, Es un placer leer a personas como tú, a pesar de que no son respuestas complejas a problemas complejos que personas como tú nos ayudan mucho en tiempos difíciles. Muchas gracias.
e-info128
public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). cancel (id);}
phnghue
1
¿Qué pasa con las notificaciones creadas por el sistema?
Zaid Mirza
220

Puedes probar este código rápido

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
Ankit Patial
fuente
19
Esta debería ser la respuesta correcta porque es simple, correcta y va directamente al grano.
ZeroTek
1
Hola, esta es la respuesta correcta. Pero la bandeja de notificaciones permanece visible. ¿Hay alguna forma de ocultarlo también? Por ejemplo, tengo dos acciones asociadas con la Notificación: cancelar y listo. Cuando se toma cualquiera de estas acciones, estoy eliminando la notificación. Pero al hacer esto, solo se elimina la notificación, pero la bandeja de notificaciones permanece visible.
Shajeel Afzal
1
1 línea, solo llame al ID de notificación: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue
No necesitas CTX. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax
61

También puede llamar cancelAllal administrador de notificaciones, para que ni siquiera tenga que preocuparse por los identificadores de notificación.

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

EDITAR: me rechazaron, así que tal vez debería especificar que esto solo eliminará la notificación de su aplicación.

Stephane Mathis
fuente
no hay un administrador de notificaciones para el primer plano:startForeground(NOTIFICATION_ID, mNotification);
user924
12

simplemente configure setAutoCancel (True) como el siguiente código:

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
fuente
3
Esto funciona solo si toca la notificación directamente. Al tocar la acción (como aquí: pl.vc/1gvrli ) no se elimina la notificación.
baris1892
Esto no es lo que se le pidió. La pregunta: "¿Necesito una muestra de cómo eliminar esa notificación de la barra de notificaciones en un evento?"
David
12

esto ayudará:

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

esto debería eliminar todas las notificaciones realizadas por la aplicación

y si crea una notificación llamando

startForeground();

dentro de un servicio, puede que tenga que llamar

stopForeground(false);

primero, luego cancele la notificación.

pilotmario
fuente
Si es posible, ¿puedes responder esta pregunta también? Hice lo mismo que sugirió, pero no funciona para mí en Android 10. Haga clic aquí para la pregunta
Maulik Dodia
7

Si está generando una Notificación desde un Servicio que se inicia en primer plano utilizando

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Luego emitiendo

notificationManager.cancel(NOTIFICATION_ID);

no funciona cancelando la Notificación y notificación todavía aparece en la barra de estado. En este caso particular, resolverá esto de 2 maneras:

1> Uso de stopForeground (falso) dentro del servicio:

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

2> Destruya esa clase de servicio con actividad de llamada:

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

¡La segunda forma prefiere la notificación del reproductor de música más porque no solo elimina la notificación, sino que también elimina el reproductor ...!

Dhruv Raval
fuente
¡Gracias por tu respuesta! ¡Usar stopForeground(true); manager.cancelAll();es lo que me resolvió!
chenshuiluke
3

Por favor intente esto,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
Akansha patel
fuente
Si es posible, ¿puedes responder esta pregunta también? Hice lo mismo que sugirió, pero no funciona para mí en Android 10. Haga clic aquí para la pregunta
Maulik Dodia
2

Use el NotificationManager para cancelar su notificación. Solo necesita proporcionar su identificación de notificación

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

también revise este enlace Ver enlace de desarrollador

Muhammad Usman Ghani
fuente
2

NotificationManager.cancel(id)Es la respuesta correcta. Sin embargo, puede eliminar en Android Oreo y notificaciones posteriores eliminando todo el canal de notificación. Esto debería eliminar todos los mensajes en el canal eliminado.

Aquí está el ejemplo de la documentación de Android :

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

En la API de Android> = 23, puede hacer algo como esto para eliminar un grupo de notificaciones.

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

Solo llame al ID:

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