Desde el nivel 16 de API (Jelly Bean), existe la posibilidad de agregar acciones a una notificación con
builder.addAction(iconId, title, intent);
Pero cuando agrego una acción a una notificación y la acción se presiona, la notificación no se descartará. Cuando se hace clic en la notificación, se puede descartar con
notification.flags = Notification.FLAG_AUTO_CANCEL;
o
builder.setAutoCancel(true);
Pero obviamente, esto no tiene nada que ver con las acciones asociadas a la notificación.
¿Alguna pista? ¿O todavía no es parte de la API? No encontré nada.
fuente
Descubrí que esto es un problema al usar la notificación de visualización de Lollipop. Ver pautas de diseño . Aquí está el código completo (ish) para implementar.
Hasta ahora, tener un botón de 'Descartar' era menos importante, pero ahora está más en tu cara.
Construyendo la Notificación
NotificaciónActividad
AndroidManifest.xml (atributos necesarios para evitar que SystemUI se enfoque en una pila de reserva)
fuente
Descubrí que cuando usas los botones de acción en notificaciones expandidas, tienes que escribir código adicional y estás más limitado.
Debe cancelar manualmente su notificación cuando el usuario hace clic en un botón de acción. La notificación solo se cancela automáticamente para la acción predeterminada.
Además, si inicia un receptor de difusión desde el botón, el cajón de notificaciones no se cierra.
Terminé creando una nueva NotificationActivity para abordar estos problemas. Esta actividad intermedia sin ninguna IU cancela la notificación y luego comienza la actividad que realmente quería comenzar desde la notificación.
He publicado un código de muestra en una publicación relacionada Al hacer clic en Acciones de notificación de Android no se cierra el cajón de notificaciones .
fuente
Puede siempre
cancel()
elNotification
de lo que está siendo invocado por la acción (por ejemplo, en elonCreate()
de la actividad ligada a laPendingIntent
que usted suministra aaddAction()
).fuente
cancel()
toma la identificación delNotification
, que usaste cuando llamastenotify()
. No necesitas elNotification
objeto.ACTION_VIEW
y el tipo esimage/jpeg
(compartir una imagen con otra aplicación), ¿cómo se supone que se activará esa cancelación? ¡IMO Android debería cancelarse automáticamente, estoy desconcertado de por qué Android no solo se encarga de eso?Notification
relacionadaPendingIntent
, no es así como fue diseñada para funcionar, por lo que se encontrará con problemas como este. "IMO Android debería cancelarse automáticamente". Pude ver que ofrecía una bandera para eso en la acción, pero no debería ser una cosa de todo el tiempo. Si lo fuera, omitir una pista en una notificación de reproductor de música cerraría la notificación.En mi opinión, usar a
BroadcastReceiver
es una forma más limpia de cancelar una Notificación:En AndroidManifest.xml:
En el archivo java:
NotificationCancelReceiver
fuente
intent.putExtra()
y obtenerlaBroadcastReceiver
En las nuevas API no te olvides de TAG:
y correspondientemente
en vez de:
https://developer.android.com/reference/android/app/NotificationManager
fuente
cancel()
función tiene 2 implementaciones; uno con TAG y otro sin. Pero tenemos que proporcionar aTAG
. Aquí está lacancel
función de los documentospublic void cancel(@Nullable String tag, int id)
. Última comprobación en Android QSolo pon esta línea:
Y el código completo es:
fuente
Deberá ejecutar el siguiente código después de que se haya disparado su intención de eliminar la notificación.
Nota: NotificationId es la misma identificación que se pasó para ejecutar su notificación
fuente
builder.setAutoCancel (verdadero);
Probado en Android 9 también.
fuente