studio - ¿Cómo verificar qué notificaciones están activas en la barra de estado en Android Dev?
programacion android pdf 2018 (8)
Quiero poder CHECK (en el código) SI LA NOTIFICACIÓN ES VISIBLE PARA EL 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 puedes simplemente cancel()
: cancelar una Notification
que no está en pantalla está perfectamente bien. Por el contrario, siempre puede llamar a notify()
forma segura para la misma Notification
, y tampoco causará problemas si la Notification
ya está en pantalla.
EDITAR:
NotificationManager.getActiveNotifications() se agregó en API 23 si no desea utilizar el NotificationListenerService
Creé una aplicación que establece notificaciones en la barra de estado desplegable de los teléfonos con Android. Sin embargo, hay un error en mi código (a veces las notificaciones se establecen, a veces no). Quiero poder CHECK (en el código) SI LA NOTIFICACIÓN ES VISIBLE PARA EL 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 muestra es muy apreciado.
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í: NotificationManager.getActiveNotifications()
Ahora es posible verificar las notificaciones pendientes en Android 4.3 hacia arriba
Mira aquí:
Debe establecer una identificación para cada notificación que realice.
entonces haces 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 limpiarlo ...
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,notId, intent, 0);
pendingIntent.cancel();
y para verificar si está activo ... (existAlarm devuelve nulo 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 para inicializar una identificación para cada notificación y cómo la hace única.
Existe una bandera para eso.
Notification notification = new Notification(icon, tickerText, when);
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE;
FLAG_ONLY_ALERT_ONCE:
... debe establecerse si desea reproducir el sonido y / o la vibración 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 nuevamente, pero no habrá sonido o vibración.
Se introduce un nuevo método en la clase NotificationManager en API 23:
public StatusBarNotification[] getActiveNotifications()
Solo para poner todo junto. Así es como funciona
Para construir una notificación,
Notification n = new Notification.Builder(MyService.this)
.setContentTitle("Notification Title")
.setContentText("Notification Message")
.setSmallIcon(R.drawable.myicon).build();
Para hacer una notificación de sonido, llame a 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 haya seleccionado y lanzado el receptor Intención, 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 que el sonido / vibre solo una vez para una notificación particular, use Notification.FLAG_ONLY_ALERT_ONCE
. Con esta bandera, su notificación emitirá un sonido solo una vez hasta que se cancele y puede llamar a notify () tantas veces como lo desee con la identificación de la notificación. Tenga en cuenta que si llama a cancelar () o si el usuario cancela la notificación o se cancela automáticamente, notificar () hará que la notificación vuelva a sonar.
n.flags |= Notification.FLAG_ONLY_ALERT_ONCE; // Dont vibrate or make notification sound
Finalmente para poner la notificación en el panel de notificaciones,
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 efectiva (para mantener un solo sonido / vibración para una notificación o para cancelar una notificación específica).
Para cancelar una notificación 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 desee con la misma ID. Tenga en cuenta que llamar notificar con una ID diferente creará nuevas notificaciones.
Por lo tanto, independientemente de si la notificación existe o no, si vuelve notify()
llamar a notify()
con el notification_id
correcto con el indicador Notification.FLAG_ONLY_ALERT_ONCE
establecido, puede mantener su notificación activa sin molestar al usuario con sonidos repetidos.
NotificationManager.getActiveNotifications() que desde Android M (API 23) es posible obtener su proceso así, sin usar NotificationListenerService ni requerir permisos adicionales:
notificationManager.getActiveNotifications()