¿Cómo comprobar qué notificaciones están activas en la barra de estado en Android Dev?

He creado una aplicación que establece notificaciones en la barra de estado desplegable de los teléfonos Android. Sin embargo, hay un error en mi código (a veces las notificaciones se establecen, a veces no lo son). Quiero poder VERIFICAR (en el código) SI LA NOTIFICACIÓN ES VISIBLE AL USUARIO. (Es decir, ¿puede el usuario ver la notificación en la barra de estado?).

¿Cómo puedo hacer esto? (Gracias por adelantado).

El código de la muestra es muy apreciado.

Quiero poder VERIFICAR (en el código) SI LA NOTIFICACIÓN ES VISIBLE AL USUARIO. (Es decir, ¿puede el usuario ver la notificación en la barra de estado?).

¿Cómo puedo hacer esto?

No puedes, lo siento. Actualización: Ahora es posible con Android 4.3 + http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getActiveNotifications ()

Sin embargo, siempre puede cancel() – cancelar una Notification que no está en la pantalla está perfectamente bien. Por el contrario, siempre puede llamar a notify() nuevamente para la misma Notification , y tampoco causará un problema si la Notification ya está en pantalla.

Debe establecer un ID para cada notificación que realice.

Por lo que hacer una notificación ..

 PendingIntent pendingIntent = PendingIntent.getBroadcast(this, notId + selectedPosition, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, rightNow.getTimeInMillis() - offset, pendingIntent); Notification notification = new Notification(R.drawable.icon, "TVGuide Υπενθύμιση", System.currentTimeMillis()); NotificationManager manger = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); notification.setLatestEventInfo(context, "Κανάλι: " + b.getString("channel"), "Εκπομπή: " + showname, pendingIntent); manger.notify(notId, notification); 

Para despejarlo

 PendingIntent pendingIntent = PendingIntent.getBroadcast(context,notId, intent, 0); pendingIntent.cancel(); 

Y para comprobar si está activo .. (existAlarm devuelve null si no hay intención pendiente disponible)

  public PendingIntent existAlarm(int id) { Intent intent = new Intent(this, alarmreceiver.class); intent.setAction(Intent.ACTION_VIEW); PendingIntent test = PendingIntent.getBroadcast(this, id + selectedPosition, intent, PendingIntent.FLAG_NO_CREATE); return test; } 

Así que todo se reduce a inicializar un ID para cada notificación y cómo hacerlo único.

Sólo para poner todo junto. Así es como funciona

Para crear una notificación,

  Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSmallIcon(R.drawable.myicon).build(); 

Para hacer una llamada de sonido de notificación setSound() de Notificación,

  Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSound(alarmSound) .setSmallIcon(R.drawable.myicon).build(); 

Para cancelar la notificación después de que el usuario seleccionó y lanzó el receptor Intent, llame a setAutoCancel() ,

  Notification n = new Notification.Builder(MyService.this) .setContentTitle("Notification Title") .setContentText("Notification Message") .setSound(alarmSound) .setAutoCancel(true) .setSmallIcon(R.drawable.myicon).build(); 

Para hacer sonar / vibrar sólo una vez para una notificación en particular, utilice Notification.FLAG_ONLY_ALERT_ONCE . Con esta bandera, la notificación hará sonar sólo una vez hasta que se cancele y se puede llamar a notify () tantas veces como quiera con el ID de notificación. Tenga en cuenta que si llama a cancelar () o si el usuario canceló la notificación o canceló automáticamente, la llamada a notify () volverá a sonar la notificación.

  n.flags |= Notification.FLAG_ONLY_ALERT_ONCE; // Dont vibrate or make notification sound 

Por último, para poner la notificación en el panel de notificación,

  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(notification_id, n); 

Tenga en cuenta que notification_id aquí es importante si desea utilizar la notificación de manera eficaz (para mantener un solo sonido / vibración para una notificación o para cancelar una notificación específica).

Para cancelar una notificación en particular,

  NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.cancel(notification_id); 

Puede cancel() una notificación incluso si no existe o puede llamar a notify() tantas veces como quiera con el mismo id. Tenga en cuenta que llamar a notificar con otro id creará nuevas notificaciones.

Así, independientemente de si la notificación existe o no, si llama a notify() nuevo con notification_id correcto con el conjunto de señas Notification.FLAG_ONLY_ALERT_ONCE , puede mantener su notificación viva sin molestar al usuario con sonidos repetidos.

Un nuevo método se introduce en la clase NotificationManager en API 23:

 public StatusBarNotification[] getActiveNotifications() 

Ahora es posible comprobar las notificaciones pendientes en android 4.3 hacia arriba

Mira aquí:

http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#getActiveNotifications ()

Existe una bandera para eso.

 Notification notification = new Notification(icon, tickerText, when); notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE; 

FLAG_ONLY_ALERT_ONCE:

… debe ajustarse si desea que el sonido y / o la vibración se reproduzcan cada vez que se envía la notificación, incluso si no se ha cancelado antes.

Aunque, la notificación parpadeará cuando se envíe de nuevo, pero no habrá ningún sonido o vibración.

Parece que desde Android M (API 23) es posible obtener su proceso así, sin usar NotificationListenerService ni requerir permisos adicionales:

notificationManager.getActiveNotifications()

A partir de Android Marshmallow (API 23), puede recuperar una lista de notificaciones activas publicadas por su aplicación. Este método de NotificationManager es getActiveNotifications() . Más información aquí: https://developer.android.com/reference/android/app/NotificationManager.html#getActiveNotifications ()

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.