¿Es posible comprobar si una notificación es visible o cancelada?

Quisiera actualizar los datos de la notificación, pero la única manera que encontré es lanzar uno nuevo con la misma identificación.

El problema es que no quiero plantear uno nuevo si el original ha sido cancelado. ¿Hay alguna manera de saber si una notificación es visible o cancelada? ¿O una forma de actualizar una notificación sólo si existe?

Así es como lo solucioné:

private boolean isNotificationVisible() { Intent notificationIntent = new Intent(context, MainActivity.class); PendingIntent test = PendingIntent.getActivity(context, MY_ID, notificationIntent, PendingIntent.FLAG_NO_CREATE); return test != null; } 

Así es como genere la notificación:

  /** * Issues a notification to inform the user that server has sent a message. */ private void generateNotification(String text) { int icon = R.drawable.notifiaction_icon; long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, text, when); String title = context.getString(R.string.app_name); Intent notificationIntent = new Intent(context, MainActivity.class); // set intent so it does not start a new activity //notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, MY_ID, notificationIntent, 0); notification.setLatestEventInfo(context, title, text, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; //PendingIntent.FLAG_ONE_SHOT notificationManager.notify(MY_ID, notification); } 

Salam. Si está usando API >= 23 puede utilizar este método para obtener notificación activa:

 StatusBarNotification[] notifications = mNotificationManager.getActiveNotifications(); for (StatusBarNotification notification : notifications) { if (notification.getId() == 100) { // Do something. } } 

Creo que puede utilizar deleteIntent de clase de Notification .

Recuerdo que en una aplicación de mi uso que utilizo para disparar una transmisión (difusión personalizada) cuando se cancela una notificación o la bandeja de notificación se borra.

Una alternativa a la deleteIntent es la siguiente que ha resultado beneficiosa en mi propia aplicación:

Básicamente, se crea una intención con la notificación que inicia un IntentService (o cualquier otro servicio) y en onHandleIntent puede establecer un indicador que indica si la notificación está activa.
Puede configurar esta intención para que se dispare cuando el usuario toque la notificación ( contentIntent ) y / o cuando el usuario lo borra de la lista ( deleteIntent ).

Para ilustrarlo, aquí es lo que hago en mi propia aplicación. Al crear la notificación,

 Intent intent = new Intent(this, CleanupIntentService.class); Notification n = NotificationCompat.Builder(context).setContentIntent( PendingIntent.getActivity(this, 0, intent, 0)).build(); 

Cuando se CleanupIntentService la notificación, se CleanupIntentService My CleanupIntentService , estableciendo un indicador (en el servicio que creó la notificación):

 @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onCreate(); // If removed, onHandleIntent is not called return super.onStartCommand(intent, flags, startId); } @Override protected void onHandleIntent(Intent intent) { OtherService.setNotificationFlag(false); } 
  • Notificación de Android después de reiniciar
  • Pin Notificación a la parte superior del área de notificación
  • Cómo utilizar un mapa de bits como un icono de notificación
  • Notificación como whatsapp o sms app android
  • Notificaciones de la API REST de Google Drive no funcionan para cambios en la carpeta de aplicaciones
  • Cómo cerrar la barra de estado / el panel de notificaciones después de hacer clic en el botón de notificación
  • Cómo configurar AlarmManager recurrente para ejecutar código diario
  • Eliminación del icono secundario de la notificación de Android
  • Android: ¿Presentar una notificación durante una llamada?
  • ¿Cómo programar las notificaciones locales de Android?
  • Notificación setAutoCancel (true) no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.