page.title=Notificaciones page.tags=notifications helpoutsWidget=true page.image=/preview/images/notifications-card.png trainingnavtop=true @jd:body
Android N presenta varias API nuevas que permiten a las aplicaciones publicar notificaciones altamente visibles e interactivas.
Android N amplía la API de notificación existente {@link android.support.v4.app.RemoteInput} para admitir respuestas en línea en teléfonos celulares. Esta función permite a los usuarios responder rápidamente desde el panel de notificaciones sin tener que visitar tu aplicación.
Android N también te permite agrupar notificaciones similares para que aparezcan como una sola notificación. Para que esto sea posible, Android N usa el método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup NotificationCompat.Builder.setGroup()}. Los usuarios pueden expandir cada una de las notificaciones y realizar acciones como responder e ignorar en cada una de ellas, de forma individual desde el panel de notificaciones.
Por último, Android N también suma nuevas API que te permiten aprovechar las decoraciones del sistema en las vistas de notificación personalizadas de tu aplicación. Estas API ayudan a garantizar que las vistas de notificaciones compartan una presentación acorde a las plantillas estándar.
En este documento se destacan algunos de los cambios clave que puedes tener en cuenta al usar las nuevas funciones de notificación en tus aplicaciones.
Con la función de respuesta directa en Android N, los usuarios pueden responder
rápidamente mensajes de texto o actualizar listas de tareas directamente dentro de la interfaz de
notificación. En un dispositivo portátil, la acción de respuesta en línea aparece como un botón adicional
anexado a la notificación. Cuando un usuario responde mediante el teclado, el sistema adjunta
la respuesta de texto a la intent
que especificaste para la acción de notificación y envía la intención a tu
aplicación para dispositivos portátiles.
Figura 1. Android N agrega el botón de acción Reply .
Para crear una acción de notificación que admita respuesta directa:
// Key for the string that's delivered in the action's intent. private static final String KEY_TEXT_REPLY = "key_text_reply"; String replyLabel = getResources().getString(R.string.reply_label); RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) .setLabel(replyLabel) .build();
addRemoteInput()
.
// Create the reply action and add the remote input. Notification.Action action = new Notification.Action.Builder(R.drawable.ic_reply_icon, getString(R.string.label), replyPendingIntent) .addRemoteInput(remoteInput) .build();
// Build the notification and add the action. Notification newMessageNotification = new Notification.Builder(mContext) .setSmallIcon(R.drawable.ic_message) .setContentTitle(getString(R.string.title)) .setContentText(getString(R.string.content)) .addAction(action)) .build(); // Issue the notification. NotificationManager notificationManager = NotificationManager.from(mContext); notificationManager.notify(notificationId, newMessageNotification);
Cuando se active la acción de notificación, el sistema le solicitará al usuario que ingrese una respuesta.
Figura 2. El usuario ingresa texto desde el panel de notificaciones.
Para recibir entradas del usuario de la interfaz de notificación a la actividad que declaraste en la intent de la acción de respuesta:
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
// Obtain the intent that started this activity by calling // Activity.getIntent() and pass it into this method to // get the associated string. private CharSequence getMessageText(Intent intent) { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); if (remoteInput != null) { return remoteInput.getCharSequence(KEY_TEXT_REPLY); } return null; }
// Build a new notification, which informs the user that the system // handled their interaction with the previous notification. Notification repliedNotification = new Notification.Builder(context) .setSmallIcon(R.drawable.ic_message) .setContentText(getString(R.string.replied)) .build(); // Issue the new notification. NotificationManager notificationManager = NotificationManager.from(context); notificationManager.notify(notificationId, repliedNotification);
En el caso de las aplicaciones interactivas, como los chats, podría ser útil incluir contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podrían mostrar múltiples líneas de historial de chat. Cuando el usuario responde a través de {@link android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas por medio del método {@code setRemoteInputHistory()}.
La notificación se debe actualizar o cancelar luego de que la aplicación haya recibido entradas remotas. Cuando el usuario responde a una actualización remota por medio de la respuesta directa, no canceles la notificación. En cambio, actualiza la notificación para mostrar la respuesta del usuario. En el caso de las notificaciones que utilizan {@code MessagingStyle}, debes agregar la respuesta como el mensaje más reciente. Cuando se utilizan otras plantillas, puedes agregar la respuesta del usuario al historial de entradas remotas.
Android N ofrece a los desarrolladores una nueva manera de representar una cola de notificaciones: notificaciones integradas. Esto es similar a la función Pilas de notificaciones en Android Wear. Por ejemplo, si tu aplicación crea notificaciones para los mensajes recibidos, cuando se recibe más de un mensaje, agrupa las notificaciones en un solo paquete. Puedes usar el método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup Builder.setGroup()} para agrupar notificaciones similares.
El grupo de notificaciones impone una jerarquía en las notificaciones que lo integran. En la parte superior de esa jerarquía se encuentra una notificación principal que muestra información resumida para el grupo. El usuario puede expandir progresivamente el grupo de notificaciones, y el sistema muestra más información a medida que el usuario continúa indagando. Cuando el usuario expande el paquete, el sistema revela más información para todas sus notificaciones secundarias; cuando el usuario expande una de esas notificaciones, el sistema revela todo su contenido.
Figura 3. El usuario puede expandir progresivamente el grupo de notificaciones.
Nota: Si la misma aplicación envía cuatro o más notificaciones y no se especifica un grupo, el sistema las agrupa automáticamente.
Para obtener información acerca de cómo agregar notificaciones a un grupo, consulta Agregar cada notificación a un grupo.
Esta sección proporciona pautas acerca de cuándo usar grupos de notificaciones en lugar de las notificaciones {@link android.app.Notification.InboxStyle InboxStyle} que estaban disponibles en versiones anteriores de la plataforma Android.
Solo debes usar grupos de notificaciones si se cumplen todas las siguientes condiciones para tu caso de uso:
Algunos ejemplos de buenos casos de uso para grupos de notificaciones incluyen: una aplicación de mensajería que exhiba una lista de mensajes entrantes, o una aplicación de correo electrónico que exhiba una lista de correos electrónicos recibidos.
Algunos ejemplos de casos en los que se prefiere una sola notificación incluyen mensajes individuales de una sola persona, o una lista de elementos de texto de una sola línea. Para lograr esto, puedes usar ({@link android.app.Notification.InboxStyle InboxStyle} o {@link android.app.Notification.BigTextStyle BigTextStyle}) .
La aplicación siempre debe publicar un resumen del grupo, aún si el grupo contiene una sola notificación secundaria. Si contiene una sola notificación, el sistema suprimirá el resumen y mostrará directamente la notificación secundaria. Esto garantiza que el sistema pueda proporcionar una experiencia uniforme cuando el usuario quita con un gesto de "deslizar" notificaciones secundarias de un grupo.
Nota: Esta versión de Android N aún no suprime el resumen para los grupos de notificaciones que contienen una sola notificación secundaria. Esta funcionalidad se agregará en una versión posterior de Android N.
Si bien el sistema generalmente muestra las notificaciones secundarias como un grupo, puedes configurarlas para que aparezcan temporalmente como notificaciones emergentes. Esta función es especialmente útil porque permite el acceso inmediato a la notificación secundaria más reciente y a las acciones asociadas a ella.
Tanto los grupos de notificaciones como las entradas remotas han formado parte de la API {@link android.app.Notification} desde Android 5.0 (API nivel 21) para soportar dispositivos con Android Wear. Si ya compilaste notificaciones con esas API, lo único que debes hacer es verificar que el comportamiento de la aplicación concuerde las pautas antes descritas y considerar la implementación de {@code setRemoteInputHistory()}.
Para poder ser compatible con versiones anteriores, están disponibles las mismas API con la clase {@link android.support.v4.app.NotificationCompat} de la biblioteca de soporte, que te permite crear notificaciones que funcionan en versiones de Android anteriores. En dispositivos portátiles y tablets, los usuarios solo ven la notificación de resumen de modo que una aplicación aún debe tener un estilo de bandeja de entrada o una notificación equivalente que represente todo el contenido del grupo. Dado que los dispositivos con Android Wear permiten a los usuarios ver todas las notificaciones secundarias incluso en niveles anteriores de la plataforma, debes crear notificaciones secundarias independientemente del nivel de API.
A partir de la versión Android N, puedes personalizar vistas de notificaciones y aún obtener decoraciones del sistema, como encabezados de notificaciones, acciones y diseños expandibles.
Para habilitar esta característica, Android N suma las siguientes API para que puedas diseñar tu vista personalizada:
Para usar esta nueva API, llama al método {@code setStyle()} y pásale el estilo de la vista personalizada que hayas elegido.
Este fragmento muestra cómo crear un objeto de notificación personalizada con el método {@code DecoratedCustomViewStyle()}.
Notification notification = new Notification.Builder() .setSmallIcon(R.drawable.ic_stat_player) .setLargeIcon(albumArtBitmap)) .setCustomContentView(contentView); .setStyle(new Notification.DecoratedCustomViewStyle()) .build();
Android N presenta una nueva API para personalizar el estilo de una notificación.
Por medio de la clase MessageStyle
, puedes modificar varias de las
etiquetas que aparecen en la notificación, incluidos el título de la conversación,
mensajes adicionales y la vista de contenido para la notificación.
El siguiente fragmento de código demuestra cómo personalizar el estilo
de una notificación mediante la clase MessageStyle
.
Notification notification = new Notification.Builder() .setStyle(new Notification.MessagingStyle("Me") .setConversationTitle("Team lunch") .addMessage("Hi", timestamp1, null) // Pass in null for user. .addMessage("What's up?", timestamp2, "Coworker") .addMessage("Not much", timestamp3, null) .addMessage("How about lunch?", timestamp4, "Coworker"));