¿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?
- Implementar la notificación de expandir y contraer Android
- Notificación para poner Actividad en primer plano sólo si está en segundo plano
- Incapaz de nosotros GCM En mi País
- ¿Cómo iniciar la notificación en fecha y hora personalizadas?
- Borrado de la notificación después de unos segundos
- Actualización de la barra de progreso de la descarga en el área de notificación de AsynTask
- Crear una notificación persistente e impedir la notificación en la barra de estado
- Iniciar servicio desde la notificación
- Notificación de desgaste de Android en la parte superior
- ¿Quitar Notificación cuando se llama addAction?
- Volver a abrir la aplicación de fondo a través del elemento de notificación
- Enviar notificaciones cuando la aplicación esté cerrada
- Iniciar nueva actividad desde la notificación en android
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); }