Notificaciones locales en Android

En esta sección se muestra cómo implementar notificaciones locales en Xamarin.Android. En él se explican los distintos elementos de la interfaz de usuario de una notificación de Android y se describe la api implicada en la creación y visualización de una notificación.

Introducción a las notificaciones locales

Android proporciona dos áreas controladas por el sistema para mostrar iconos de notificación e información de notificación al usuario. Cuando se publica una notificación por primera vez, su icono se muestra en el área de notificación , como se muestra en la captura de pantalla siguiente:

Área de notificación de ejemplo en un dispositivo.

Para obtener detalles sobre la notificación, el usuario puede abrir el cajón de notificaciones (que expande cada icono de notificación para mostrar el contenido de la notificación) y realizar las acciones asociadas a las notificaciones. En la captura de pantalla siguiente se muestra un cajón de notificaciones que corresponde al área de notificación mostrada anteriormente:

Cajón de notificaciones de ejemplo que muestra tres notificaciones.

Las notificaciones de Android usan dos tipos de diseños:

  • Diseño base – un formato de presentación compacto y fijo.

  • Diseño expandido – un formato de presentación que puede expandirse a un tamaño mayor para mostrar más información.

Cada uno de estos tipos de diseño (y cómo crearlos) se explica en las secciones siguientes.

Nota

Esta guía se centra en las API NotificationCompat de la biblioteca de compatibilidad de Android. Estas API garantizarán la máxima compatibilidad con versiones anteriores de Android 4.0 (nivel de API 14).

Diseño base

Todas las notificaciones de Android se basan en el formato de diseño base, que, como mínimo, incluye los siguientes elementos:

  1. Icono de notificación, que representa la aplicación de origen, o el tipo de notificación si la aplicación admite distintos tipos de notificaciones.

  2. El título de la notificación o el nombre del remitente si la notificación es un mensaje personal.

  3. Mensaje de notificación.

  4. Marca de tiempo.

Estos elementos se muestran como se muestra en el diagrama siguiente:

Ubicación de los elementos de notificación.

Los diseños base están limitados a 64 píxeles independientes de la densidad (dp) de alto. Android crea este estilo de notificación básico de forma predeterminada.

Opcionalmente, las notificaciones pueden mostrar un icono grande que representa la aplicación o la foto del remitente. Cuando se usa un icono grande en una notificación en Android 5.0 y versiones posteriores, el icono de notificación pequeño se muestra como una notificación sobre el icono grande:

Foto de notificación simple.

A partir de Android 5.0, también pueden aparecer notificaciones en la pantalla de bloqueo:

Notificación de pantalla de bloqueo de ejemplo.

El usuario puede pulsar dos veces la notificación de la pantalla de bloqueo para desbloquear el dispositivo y saltar a la aplicación que originó esa notificación, o deslizar el dedo para descartar la notificación. Las aplicaciones pueden establecer el nivel de visibilidad de una notificación para controlar lo que se muestra en la pantalla de bloqueo y los usuarios pueden elegir si se permite que se pueda mostrar contenido confidencial en las notificaciones de pantalla de bloqueo.

Android 5.0 introdujo un formato de presentación de notificación de alta prioridad denominado Aviso. Las notificaciones de aviso se deslizan hacia abajo desde la parte superior de la pantalla durante unos segundos y, a continuación, se retiran al área de notificación:

Notificación de aviso de ejemplo.

Las notificaciones de alerta hacen posible que la interfaz de usuario del sistema coloque información importante delante del usuario sin interrumpir el estado de la actividad que se está ejecutando actualmente.

Android incluye compatibilidad con metadatos de notificación para que las notificaciones se puedan ordenar y mostrar de forma inteligente. Los metadatos de notificación también controlan cómo se presentan las notificaciones en la pantalla de bloqueo y en formato de aviso. Las aplicaciones pueden establecer los siguientes tipos de metadatos de notificación:

  • Prioridad – El nivel de prioridad determina cómo y cuándo se presentan las notificaciones. Por ejemplo, en Android 5.0, las notificaciones de prioridad alta se muestran como notificaciones de aviso.

  • Visibilidad – Especifica cuánto contenido de notificación se mostrará cuando la notificación aparezca en la pantalla de bloqueo.

  • Categoría – Informa al sistema de cómo controlar la notificación en varias circunstancias, como cuando el dispositivo está en modo No inquietar.

Nota

Visibility y Category se introdujeron en Android 5.0 y no están disponibles en versiones anteriores de Android. A partir de Android 8.0, los canales de notificación se usan para controlar cómo se presentan las notificaciones al usuario.

Diseños expandido

A partir de Android 4.1, las notificaciones se pueden configurar con estilos de diseño expandido que permiten al usuario expandir el alto de la notificación para ver más contenido. Por ejemplo, en el ejemplo siguiente se muestra una notificación de diseño expandida en modo con contrato:

Notificación contratada.

Cuando se expande esta notificación, se muestra el mensaje completo:

Notificación expandida.

Android admite tres estilos de diseño expandido para notificaciones de un solo evento:

  • Texto grande – En el modo con contrato, muestra un extracto de la primera línea del mensaje seguido de dos puntos. En el modo expandido, muestra el mensaje completo (como se muestra en el ejemplo anterior).

  • Bandeja de entrada – En el modo con contrato, muestra el número de mensajes nuevos. En modo expandido, muestra el primer mensaje de correo electrónico o una lista de los mensajes en la bandeja de entrada.

  • Imagen – En el modo con contrato, muestra solo el texto del mensaje. En el modo expandido, muestra el texto y una imagen.

Más allá de la notificación básica (más adelante en este artículo) se explica cómo crear notificaciones de texto grande, bandeja de entrada e imagen.

Canales de notificación

A partir de Android 8.0 (Oreo), puede usar la característica canales de notificación para crear un canal personalizable por el usuario para cada tipo de notificación que quiera mostrar. Los canales de notificación le permite agrupar notificaciones para que todas las notificaciones publicadas en un canal presenten el mismo comportamiento. Por ejemplo, podría tener un canal de notificación destinado a notificaciones que requieran atención inmediata y un canal "más silencioso" independiente que se usa para los mensajes informativos.

La aplicación de YouTube que se instala con Android Oreo enumera dos categorías de notificación: Descargar notificaciones y Notificaciones generales:

Pantallas de notificación para YouTube en Android Oreo.

Cada una de estas categorías corresponde a un canal de notificación. La aplicación YouTube implementa un canal descargar notificaciones y un canal de notificaciones generales. El usuario puede pulsar Descargar notificaciones, que muestra la pantalla de configuración del canal de notificaciones de descarga de la aplicación:

Descargue la pantalla de notificaciones de la aplicación de YouTube.

En esta pantalla, el usuario puede modificar el comportamiento del canal Descargar notificaciones haciendo lo siguiente:

  • Establezca el nivel de importancia en Urgente, Alto, Medio o Bajo, que configura el nivel de interrupción visual y de sonido.

  • Active o desactive el punto de notificación.

  • Active o desactive la luz parpadeante.

  • Mostrar u ocultar notificaciones en la pantalla de bloqueo.

  • Invalide la opción No interrumpir.

El canal De notificaciones generales tiene una configuración similar:

Pantalla de notificaciones generales de la aplicación de YouTube.

Tenga en cuenta que no tiene control absoluto sobre cómo interactúan los canales de notificación con el usuario, el usuario puede modificar la configuración de cualquier canal de notificación en el dispositivo, como se muestra en las capturas – de pantalla anteriores. Sin embargo, puede configurar los valores predeterminados (como se describirá a continuación). Como se muestra en estos ejemplos, la nueva característica de canales de notificación permite proporcionar a los usuarios un control específico sobre los distintos tipos de notificaciones.

Creación de notificaciones

Para crear una notificación en Android, use la clase NotificationCompat.Builder del paquete de NuGet Xamarin.Android.Support.v4. Esta clase permite crear y publicar notificaciones en versiones anteriores de Android. NotificationCompat.Builder también se describe.

NotificationCompat.Builder proporciona métodos para establecer las distintas opciones de una notificación, como:

  • El contenido, incluidos el título, el texto del mensaje y el icono de notificación.

  • Estilo de la notificación, como Texto grande, Bandeja de entrada o Estilo de imagen.

  • Prioridad de la notificación: mínima, baja, predeterminada, alta o máxima. En Android 8.0 y versiones posteriores, la prioridad se establece a través de un canal de notificación.

  • Visibilidad de la notificación en la pantalla de bloqueo: pública, privada o secreta.

  • Metadatos de categoría que ayudan a Android a clasificar y filtrar la notificación.

  • Intención opcional que indica una actividad que se va a iniciar cuando se pulsa la notificación.

  • Identificador del canal de notificación en el que se publicará la notificación (Android 8.0 y versiones posteriores).

Después de establecer estas opciones en el generador, se genera un objeto de notificación que contiene la configuración. Para publicar la notificación, pase este objeto de notificación al Administrador de notificaciones. Android proporciona la clase NotificationManager, que es responsable de publicar notificaciones y mostrarlas al usuario. Se puede obtener una referencia a esta clase desde cualquier contexto, como una actividad o un servicio.

Creación de un canal de notificación

Las aplicaciones que se ejecutan en Android 8.0 deben crear un canal de notificación para sus notificaciones. Un canal de notificación requiere los tres fragmentos de información siguientes:

  • Cadena de identificador que es única para el paquete que identificará el canal.
  • Nombre del canal que se mostrará al usuario. El nombre debe tener entre uno y 40 caracteres.
  • Importancia del canal.

Las aplicaciones tendrán que comprobar la versión de Android que están ejecutando. Los dispositivos que ejecutan versiones anteriores a Android 8.0 no deben crear un canal de notificación. El método siguiente es un ejemplo de cómo crear un canal de notificación en una actividad:

void CreateNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var channelName = Resources.GetString(Resource.String.channel_name);
    var channelDescription = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
                  {
                      Description = channelDescription
                  };

    var notificationManager = (NotificationManager) GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
}

El canal de notificación debe crearse cada vez que se crea la actividad. Para el CreateNotificationChannel método , se debe llamar a en el método de una actividad OnCreate .

Creación y publicación de una notificación

Para generar una notificación en Android, siga estos pasos:

  1. Cree una instancia de un objeto NotificationCompat.Builder.

  2. Llame a varios métodos en el NotificationCompat.Builder objeto para establecer las opciones de notificación.

  3. Llame al método Build del objeto para crear una instancia de un objeto NotificationCompat.Builder de notificación.

  4. Llame al método Notify del administrador de notificaciones para publicar la notificación.

Debe proporcionar al menos la siguiente información para cada notificación:

  • Un icono pequeño (24 x 24 dp de tamaño)

  • Un título corto

  • Texto de la notificación

En el ejemplo de código siguiente se muestra cómo usar NotificationCompat.Builder para generar una notificación básica. Observe que los métodos admiten el encadenamiento de métodos; es decir, cada método devuelve el objeto de generador para que pueda usar el resultado de la última llamada al método para invocar la NotificationCompat.Builder siguiente llamada al método:

// Instantiate the builder and set notification elements:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

En este ejemplo, se crea una instancia de un nuevo objeto denominado , junto con el identificador del NotificationCompat.Builder canal de notificación que se va a builder usar. Se establecen el título y el texto de la notificación, y el icono de notificación se carga desde Resources/drawable/ic_notification.png. La llamada al método del generador de notificaciones Build crea un objeto de notificación con esta configuración. El siguiente paso consiste en llamar al Notify método del administrador de notificaciones. Para buscar el administrador de notificaciones, llame a GetSystemService , como se muestra anteriormente.

El Notify método acepta dos parámetros: el identificador de notificación y el objeto de notificación. El identificador de notificación es un entero único que identifica la notificación a la aplicación. En este ejemplo, el identificador de notificación se establece en cero (0); sin embargo, en una aplicación de producción, querrá asignar a cada notificación un identificador único. Volver a usar el valor de identificador anterior en una llamada a hace que se sobrescriba Notify la última notificación.

Cuando este código se ejecuta en un dispositivo Android 5.0, genera una notificación similar al ejemplo siguiente:

Resultado de la notificación del código de ejemplo.

El icono de notificación se muestra en el lado izquierdo de la notificación. Esta imagen de un i en círculo tiene un canal alfa para que Android pueda dibujar un fondo circular gris – “ ” detrás. También puede proporcionar un icono sin un canal alfa. Para mostrar una imagen de fotografías como un icono, vea Formato de icono grande más adelante en este tema.

La marca de tiempo se establece automáticamente, pero puede invalidar esta configuración llamando al método SetWhen del generador de notificaciones. Por ejemplo, en el ejemplo de código siguiente se establece la marca de tiempo en la hora actual:

builder.SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis());

Habilitación del sonido y la vibración

Si quiere que la notificación también reprodgue un sonido, puede llamar al método SetDefaults del generador de notificaciones y pasar la NotificationDefaults.Sound marca:

// Instantiate the notification builder and enable sound:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetDefaults (NotificationDefaults.Sound)
    .SetSmallIcon (Resource.Drawable.ic_notification);

Esta llamada a SetDefaults hará que el dispositivo reprodgue un sonido cuando se publique la notificación. Si desea que el dispositivo vibre en lugar de reproducir un sonido, puede pasar a Si desea que el dispositivo reprodgue un sonido y vibre el dispositivo, puede pasar ambas marcas NotificationDefaults.Vibrate SetDefaults. a SetDefaults :

builder.SetDefaults (NotificationDefaults.Sound | NotificationDefaults.Vibrate);

Si habilita el sonido sin especificar un sonido para reproducir, Android usa el sonido de notificación del sistema predeterminado. Sin embargo, puede cambiar el sonido que se reproducirá llamando al método Set Sound del generador de notificaciones. Por ejemplo, para reproducir el sonido de alarma con la notificación (en lugar del sonido de notificación predeterminado), puede obtener el URI del sonido de alarma desde ElManagerManager y pasarlo a SetSound :

builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Alarm));

Como alternativa, puede usar el sonido de sonido de sonido predeterminado del sistema para la notificación:

builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Ringtone));

Después de crear un objeto de notificación, es posible establecer propiedades de notificación en el objeto de notificación (en lugar de configurarlas de antemano a través de NotificationCompat.Builder métodos). Por ejemplo, en lugar de llamar al método para habilitar la vibración en una notificación, puede modificar directamente la marca de bits de la SetDefaults propiedad Defaults de la notificación:

// Build the notification:
Notification notification = builder.Build();

// Turn on vibrate:
notification.Defaults |= NotificationDefaults.Vibrate;

En este ejemplo, el dispositivo se vibración cuando se publica la notificación.

Actualización de una notificación

Si desea actualizar el contenido de una notificación una vez publicada, puede reutilizar el objeto existente para crear un nuevo objeto de notificación y publicar esta notificación con el identificador de la última NotificationCompat.Builder notificación. Por ejemplo:

// Update the existing notification builder content:
builder.SetContentTitle ("Updated Notification");
builder.SetContentText ("Changed to this message.");

// Build a notification object with updated content:
notification = builder.Build();

// Publish the new notification with the existing ID:
notificationManager.Notify (notificationId, notification);

En este ejemplo, el objeto NotificationCompat.Builder existente se usa para crear un nuevo objeto de notificación con un título y un mensaje diferentes. El nuevo objeto de notificación se publica mediante el identificador de la notificación anterior y esto actualiza el contenido de la notificación publicada anteriormente:

Notificación actualizada.

El cuerpo de la notificación anterior se reutiliza solo el título y el texto de la notificación cambia mientras la notificación se – muestra en el cajón de notificaciones. El texto del título cambia de "Notificación de ejemplo" a "Notificación actualizada" y el texto del mensaje cambia de "Hola mundo! Esta es mi primera notificación. a "Se ha cambiado a este mensaje".

Una notificación permanece visible hasta que ocurre una de estas tres cosas:

  • El usuario descarta la notificación (o pulsa Borrar todo).

  • La aplicación realiza una llamada a , pasando el identificador de notificación único que NotificationManager.Cancel se asignó cuando se publicó la notificación.

  • La aplicación llama a NotificationManager.CancelAll .

Para obtener más información sobre cómo actualizar las notificaciones de Android, vea Modificar una notificación.

Inicio de una actividad desde una notificación

En Android, es habitual que una notificación se asocie a una acción que se inicia cuando el usuario pulsa – la notificación. Esta actividad puede residir en otra aplicación o incluso en otra tarea. Para agregar una acción a una notificación, cree un objeto PendingIntent y asócialo PendingIntent a la notificación. Un es un tipo especial de intención que permite a la aplicación de destinatario ejecutar un fragmento de código predefinido con los PendingIntent permisos de la aplicación de envío. Cuando el usuario pulsa la notificación, Android inicia la actividad especificada por PendingIntent .

El fragmento de código siguiente muestra cómo crear una notificación con un que iniciará PendingIntent la actividad de la aplicación de origen, MainActivity :

// Set up an intent so that tapping the notifications returns to this app:
Intent intent = new Intent (this, typeof(MainActivity));

// Create a PendingIntent; we're only using one PendingIntent (ID = 0):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
    PendingIntent.GetActivity (this, pendingIntentId, intent, PendingIntentFlags.OneShot);

// Instantiate the builder and set notification elements, including pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentIntent (pendingIntent)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first action notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

Este código es muy similar al código de notificación de la sección anterior, salvo que se agrega un al PendingIntent objeto de notificación. En este ejemplo, está asociado a la actividad de la aplicación de origen antes de pasarla al método PendingIntent SetContentIntent del generador de notificaciones. La PendingIntentFlags.OneShot marca se pasa al método para que se utilice solo una PendingIntent.GetActivity PendingIntent vez. Cuando se ejecuta este código, se muestra la notificación siguiente:

Primera notificación de acción.

Al pulsar esta notificación, el usuario vuelve a la actividad de origen.

En una aplicación de producción, la aplicación debe controlar la pila de copia de seguridad cuando el usuario presiona el botón Atrás dentro de la actividad de notificación (si no está familiarizado con las tareas de Android y la pila posterior, consulte Tareas y pila de copia de seguridad). En la mayoría de los casos, al salir de la actividad de notificación, el usuario debe salir de la aplicación y volver a la pantalla principal. Para administrar la pila de back-stack, la aplicación usa la clase TaskStackBuilder para crear un con PendingIntent una pila de back-stack.

Otra consideración real es que la actividad de origen puede necesitar enviar datos a la actividad de notificación. Por ejemplo, la notificación puede indicar que ha llegado un mensaje de texto y la actividad de notificación (una pantalla de visualización de mensajes) requiere el identificador del mensaje para mostrar el mensaje al usuario. La actividad que crea puede usar el PendingIntent método Intent.PutExtra para agregar datos (por ejemplo, una cadena) a la intención para que estos datos se pasen a la actividad de notificación.

En el ejemplo de código siguiente se muestra cómo usar para administrar la pila posterior e incluye un ejemplo de cómo enviar una cadena de mensaje única a una actividad TaskStackBuilder de notificación denominada SecondActivity :

// Setup an intent for SecondActivity:
Intent secondIntent = new Intent (this, typeof(SecondActivity));

// Pass some information to SecondActivity:
secondIntent.PutExtra ("message&quot;, &quot;Greetings from MainActivity!");

// Create a task stack builder to manage the back stack:
TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);

// Add all parents of SecondActivity to the stack:
stackBuilder.AddParentStack (Java.Lang.Class.FromType (typeof (SecondActivity)));

// Push the intent that starts SecondActivity onto the stack:
stackBuilder.AddNextIntent (secondIntent);

// Obtain the PendingIntent for launching the task constructed by
// stackbuilder. The pending intent can be used only once (one shot):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
    stackBuilder.GetPendingIntent (pendingIntentId, PendingIntentFlags.OneShot);

// Instantiate the builder and set notification elements, including
// the pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .SetContentIntent (pendingIntent)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my second action notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);

En este ejemplo de código, la aplicación consta de dos actividades: (que contiene el código de notificación anterior) y , la pantalla que el usuario ve después de pulsar MainActivity SecondActivity la notificación. Cuando se ejecuta este código, se presenta una notificación simple (similar al ejemplo anterior). Al pulsar en la notificación, el usuario se muestra en la SecondActivity pantalla:

Captura de pantalla de la segunda actividad.

El mensaje de cadena (pasado al método de la PutExtra intención) se recupera en SecondActivity a través de esta línea de código:

// Get the message from the intent:
string message = Intent.Extras.GetString ("message&quot;, &quot;");

Este mensaje recuperado, "Greetings from MainActivity!", se muestra en la pantalla, como se muestra SecondActivity en la captura de pantalla anterior. Cuando el usuario presiona el botón Atrás mientras está en , la navegación sale de la aplicación y vuelve a la pantalla anterior al SecondActivity inicio de la aplicación.

Para obtener más información sobre cómo crear intenciones pendientes, vea PendingIntent.

Más allá de la notificación básica

Las notificaciones tienen como valor predeterminado un formato de diseño base simple en Android, pero puede mejorar este formato básico mediante llamadas a NotificationCompat.Builder métodos adicionales. En esta sección, aprenderá a agregar un icono de foto grande a la notificación y verá ejemplos de cómo crear notificaciones de diseño expandido.

Formato de icono grande

Las notificaciones de Android suelen mostrar el icono de la aplicación de origen (en el lado izquierdo de la notificación). Sin embargo, las notificaciones pueden mostrar una imagen o una foto (un icono grande) en lugar del icono pequeño estándar. Por ejemplo, una aplicación de mensajería podría mostrar una foto del remitente en lugar del icono de la aplicación.

Este es un ejemplo de una notificación básica de Android 5.0 – que muestra solo el icono de aplicación pequeña:

Notificación normal de ejemplo.

Y esta es una captura de pantalla de la notificación después de modificarla para mostrar un icono grande, en la que se usa un icono creado a partir de una imagen de – un mono de código xamarin:

Ejemplo de notificación de icono grande.

Tenga en cuenta que cuando se presenta una notificación en formato de icono grande, el icono de aplicación pequeña se muestra como una notificación en la esquina inferior derecha del icono grande.

Para usar una imagen como un icono grande en una notificación, llame al método SetLargeIcon del generador de notificaciones y pase un mapa de bits de la imagen. A SetSmallIcon diferencia de , solo acepta un mapa de SetLargeIcon bits. Para convertir un archivo de imagen en un mapa de bits, use la clase BitmapFactory. Por ejemplo:

builder.SetLargeIcon (BitmapFactory.DecodeResource (Resources, Resource.Drawable.monkey_icon));

Este código de ejemplo abre el archivo de imagen en Resources/drawable/monkey_icon.png, lo convierte en un mapa de bits y pasa el mapa de bits resultante a NotificationCompat.Builder . Normalmente, la resolución de la imagen de origen es mayor que el icono – pequeño, pero no mucho más grande. Una imagen demasiado grande podría provocar operaciones de tamaño innecesarias que podrían retrasar la publicación de la notificación.

Estilo de texto grande

El estilo de texto grande es una plantilla de diseño expandida que se usa para mostrar mensajes largos en las notificaciones. Al igual que todas las notificaciones de diseño expandido, la notificación de texto grande se muestra inicialmente en un formato de presentación compacto:

Ejemplo de notificación de texto grande.

En este formato, solo se muestra un extracto del mensaje, finalizado por dos puntos. Cuando el usuario arrastra hacia abajo la notificación, se expande para mostrar el mensaje de notificación completo:

Notificación de texto grande expandido.

Este formato de diseño expandido también incluye texto de resumen en la parte inferior de la notificación. El alto máximo de la notificación de texto grande es de 256 dp.

Para crear una notificación de texto grande, cree una instancia de un objeto, como antes, y, a continuación, cree una instancia y agregue un NotificationCompat.Builder objeto BigTextStyle al NotificationCompat.Builder objeto . Este es un ejemplo:

// Instantiate the Big Text style:
Notification.BigTextStyle textStyle = new Notification.BigTextStyle();

// Fill it with text:
string longTextMessage = "I went up one pair of stairs.";
longTextMessage += " / Just like me. ";
//...
textStyle.BigText (longTextMessage);

// Set the summary text:
textStyle.SetSummaryText ("The summary text goes here.");

// Plug this style into the builder:
builder.SetStyle (textStyle);

// Create the notification and publish it ...

En este ejemplo, el texto del mensaje y el texto de resumen se almacenan en el BigTextStyle objeto ( ) antes de textStyle pasarlo a . NotificationCompat.Builder.

Estilo de imagen

El estilo de imagen (también denominado estilo big picture) es un formato de notificación expandido que puede usar para mostrar una imagen en el cuerpo de una notificación. Por ejemplo, una aplicación de captura de pantalla o una aplicación de fotos pueden usar el estilo de notificación Imagen para proporcionar al usuario una notificación de la última imagen capturada. Tenga en cuenta que el alto máximo de la notificación de imagen es 256 dp Android cambia el tamaño de la imagen para que se ajuste a esta restricción de altura máxima, dentro de los límites de – memoria disponible.

Al igual que todas las notificaciones de diseño expandido, las notificaciones de imagen se muestran primero en un formato compacto que muestra un extracto del texto del mensaje adjunto:

La notificación de imagen compacta no muestra ninguna imagen.

Cuando el usuario arrastra hacia abajo en la notificación Imagen, se expande para mostrar una imagen. Por ejemplo, esta es la versión expandida de la notificación anterior:

La notificación de imagen expandida revela la imagen.

Tenga en cuenta que cuando la notificación se muestra en formato compacto, muestra el texto de notificación (el texto que se pasa al método del generador de notificaciones, como se SetContentText mostró anteriormente). Sin embargo, cuando la notificación se expande para mostrar la imagen, muestra texto de resumen encima de la imagen.

Para crear una notificación image, cree una instancia de un objeto como antes y, a continuación, cree e inserte un NotificationCompat.Builder objeto BigPictureStyle en el NotificationCompat.Builder objeto . Por ejemplo:

// Instantiate the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();

// Convert the image to a bitmap before passing it into the style:
picStyle.BigPicture (BitmapFactory.DecodeResource (Resources, Resource.Drawable.x_bldg));

// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("The summary text goes here.");

// Plug this style into the builder:
builder.SetStyle (picStyle);

// Create the notification and publish it ...

Al igual SetLargeIcon que el método de , el método NotificationCompat.Builder BigPicture de requiere un mapa de bits de la imagen que desea mostrar en el BigPictureStyle cuerpo de la notificación. En este ejemplo, el método DecodeResource de lee el archivo de imagen ubicado en BitmapFactory Resources/drawable/x_bldg.png y lo convierte en un mapa de bits.

También puede mostrar imágenes que no están empaquetadas como un recurso. Por ejemplo, el código de ejemplo siguiente carga una imagen de la tarjeta SD local y la muestra en una notificación de imagen:

// Using the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();

// Read an image from the SD card, subsample to half size:
BitmapFactory.Options options = new BitmapFactory.Options();
options.InSampleSize = 2;
string imagePath = "/sdcard/Pictures/my-tshirt.jpg";
picStyle.BigPicture (BitmapFactory.DecodeFile (imagePath, options));

// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("Check out my new T-Shirt!");

// Plug this style into the builder:
builder.SetStyle (picStyle);

// Create notification and publish it ...

En este ejemplo, se carga el archivo de imagen ubicado en /sdcard/Pictures/my-tshirt.jpg, se cambia el tamaño a la mitad de su tamaño original y, a continuación, se convierte en un mapa de bits para su uso en la notificación:

Imagen de camiseta de ejemplo en la notificación.

Si no conoce el tamaño del archivo de imagen de antemano, es una buena idea encapsular la llamada a BitmapFactory.DecodeFile en un controlador de excepciones, es posible que se produce una excepción si la imagen es demasiado grande para que Android cambie de – OutOfMemoryError tamaño.

Para obtener más información sobre cómo cargar y descodar imágenes de mapa de bits grandes, vea Cargar mapas de bits grandes de forma eficaz.

Estilo de bandeja de entrada

El formato bandeja de entrada es una plantilla de diseño expandida diseñada para mostrar líneas de texto independientes (como un resumen de bandeja de entrada de correo electrónico) en el cuerpo de la notificación. La notificación de formato de bandeja de entrada se muestra primero en un formato compacto:

Ejemplo de notificación de bandeja de entrada compacta.

Cuando el usuario arrastra hacia abajo la notificación, se expande para mostrar un resumen de correo electrónico como se muestra en la captura de pantalla siguiente:

Notificación de bandeja de entrada de ejemplo expandida.

Para crear una notificación de Bandeja de entrada, cree una instancia de un objeto , como antes, y agregue un objeto NotificationCompat.Builder InboxStyle a NotificationCompat.Builder . Este es un ejemplo:

// Instantiate the Inbox style:
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();

// Set the title and text of the notification:
builder.SetContentTitle ("5 new messages");
builder.SetContentText ("chimchim@xamarin.com");

// Generate a message summary for the body of the notification:
inboxStyle.AddLine ("Cheeta: Bananas on sale");
inboxStyle.AddLine ("George: Curious about your blog post");
inboxStyle.AddLine ("Nikko: Need a ride to Evolve?");
inboxStyle.SetSummaryText ("+2 more");

// Plug this style into the builder:
builder.SetStyle (inboxStyle);

Para agregar nuevas líneas de texto al cuerpo de la notificación, llame al método Addline del objeto (el alto máximo de la notificación de bandeja de entrada InboxStyle es 256 dp). Tenga en cuenta que, a diferencia del estilo de texto grande, el estilo bandeja de entrada admite líneas individuales de texto en el cuerpo de la notificación.

También puede usar el estilo bandeja de entrada para cualquier notificación que necesite mostrar líneas de texto individuales en un formato expandido. Por ejemplo, el estilo de notificación bandeja de entrada se puede usar para combinar varias notificaciones pendientes en una notificación de resumen, puede actualizar una única notificación de estilo Bandeja de entrada con nuevas líneas de contenido de notificación (consulte Actualización de una notificación anterior), en lugar de generar un flujo continuo de notificaciones nuevas, principalmente – similares.

Configuración de metadatos

NotificationCompat.Builder incluye métodos a los que puede llamar para establecer metadatos sobre la notificación, como prioridad, visibilidad y categoría. Android usa esta información — junto con la configuración de preferencias del usuario para determinar cómo y cuándo se muestran las — notificaciones.

Configuración de prioridad

Las aplicaciones que se ejecutan en Android 7.1 y versiones inferiores deben establecer la prioridad directamente en la propia notificación. La configuración de prioridad de una notificación determina dos resultados cuando se publica la notificación:

  • Donde la notificación aparece en relación con otras notificaciones. Por ejemplo, las notificaciones de prioridad alta se presentan por encima de las notificaciones de prioridad inferior en el cajón de notificaciones, independientemente de cuándo se publicara cada notificación.

  • Si la notificación se muestra en el formato de notificación de aviso (Android 5.0 y versiones posteriores). Solo las notificaciones de prioridad alta y máxima se muestran como notificaciones de aviso.

Xamarin.Android define las enumeraciones siguientes para establecer la prioridad de notificación:

  • NotificationPriority.MaxAlerta al usuario de una condición urgente o crítica (por ejemplo, una llamada entrante, direcciones – turn-by-turn o una alerta de emergencia). En dispositivos Android 5.0 y versiones posteriores, las notificaciones de prioridad máxima se muestran en formato de aviso.

  • NotificationPriority.High–Informa al usuario de eventos importantes (como correos electrónicos importantes o la llegada de mensajes de chat en tiempo real). En dispositivos Android 5.0 y versiones posteriores, las notificaciones de prioridad alta se muestran en formato de aviso.

  • NotificationPriority.Default–Notifica al usuario las condiciones que tienen un nivel medio de importancia.

  • NotificationPriority.LowPara obtener información no urgente de la que el usuario debe estar informado (por ejemplo, recordatorios de actualizaciones de software o – actualizaciones de redes sociales).

  • NotificationPriority.MinPara obtener información general que el usuario solo observa al – ver notificaciones (por ejemplo, información de ubicación o tiempo).

Para establecer la prioridad de una notificación, llame al método SetPriority del NotificationCompat.Builder objeto y pase el nivel de prioridad. Por ejemplo:

builder.SetPriority (NotificationPriority.High);

En el ejemplo siguiente, la notificación de prioridad alta, "An important message!" (Un mensaje importante). aparece en la parte superior del cajón de notificaciones:

Notificación de alta prioridad de ejemplo.

Dado que se trata de una notificación de alta prioridad, también se muestra como una notificación de aviso encima de la pantalla de actividad actual del usuario en Android 5.0:

Notificación de aviso de ejemplo.

En el ejemplo siguiente, la notificación de prioridad baja "Pensado para el día" se muestra en una notificación de nivel de batería de prioridad más alta:

Ejemplo de notificación de prioridad baja.

Dado que la notificación "Pensado para el día" es una notificación de prioridad baja, Android no la mostrará en formato de aviso.

Nota

En Android 8.0 y versiones posteriores, la prioridad del canal de notificación y la configuración del usuario determinarán la prioridad de la notificación.

Configuración de visibilidad

A partir de Android 5.0, la configuración de visibilidad está disponible para controlar la cantidad de contenido de notificación que aparece en la pantalla de bloqueo seguro. Xamarin.Android define las enumeraciones siguientes para establecer la visibilidad de las notificaciones:

  • NotificationVisibility.Public–El contenido completo de la notificación se muestra en la pantalla de bloqueo seguro.

  • NotificationVisibility.PrivateSolo se muestra información esencial en la pantalla de bloqueo seguro (como el icono de notificación y el nombre de la aplicación que la publicó), pero el resto de los detalles de la – notificación están ocultos. Todas las notificaciones tienen como valor predeterminado NotificationVisibility.Private .

  • NotificationVisibility.Secret–No se muestra nada en la pantalla de bloqueo seguro, ni siquiera en el icono de notificación. El contenido de la notificación solo está disponible después de que el usuario desbloquee el dispositivo.

Para establecer la visibilidad de una notificación, las aplicaciones llaman al SetVisibility método del objeto y pasan la configuración de NotificationCompat.Builder visibilidad. Por ejemplo, esta llamada a SetVisibility realiza la notificación Private :

builder.SetVisibility (NotificationVisibility.Private);

Cuando se publica una notificación, solo se muestran el nombre y el icono de la aplicación Private en la pantalla de bloqueo seguro. En lugar del mensaje de notificación, el usuario ve "Desbloquear el dispositivo para ver esta notificación":

Desbloquee el mensaje de notificación del dispositivo.

En este ejemplo, NotificationsLab es el nombre de la aplicación de origen. Esta versión censurada de la notificación solo aparece cuando la pantalla de bloqueo es segura (es decir, protegida mediante PIN, patrón o contraseña) si la pantalla de bloqueo no es segura, el contenido completo de la notificación está disponible en la pantalla de – bloqueo.

Configuración de categoría

A partir de Android 5.0, las categorías predefinidas están disponibles para las notificaciones de clasificación y filtrado. Xamarin.Android proporciona las enumeraciones siguientes para estas categorías:

  • Notification.CategoryCall–Llamada telefónica entrante.

  • Notification.CategoryMessage–Mensaje de texto entrante.

  • Notification.CategoryAlarm–Una condición de alarma o expiración del temporizador.

  • Notification.CategoryEmail–Mensaje de correo electrónico entrante.

  • Notification.CategoryEvent–Evento de calendario.

  • Notification.CategoryPromo–Un mensaje promocional o anuncio.

  • Notification.CategoryProgress–Progreso de una operación en segundo plano.

  • Notification.CategorySocial–Actualización de redes sociales.

  • Notification.CategoryError–Error de una operación en segundo plano o un proceso de autenticación.

  • Notification.CategoryTransport–Actualización de reproducción multimedia.

  • Notification.CategorySystem–Reservado para uso del sistema (estado del sistema o del dispositivo).

  • Notification.CategoryService–Indica que se está ejecutando un servicio en segundo plano.

  • Notification.CategoryRecommendation–Mensaje de recomendación relacionado con la aplicación que se está ejecutando actualmente.

  • Notification.CategoryStatus–Información sobre el dispositivo.

Cuando se ordenan las notificaciones, la prioridad de la notificación tiene prioridad sobre su configuración de categoría. Por ejemplo, una notificación de prioridad alta se mostrará como Avisos, incluso si pertenece a la Promo categoría . Para establecer la categoría de una notificación, llame al SetCategory método del objeto y pase la configuración de NotificationCompat.Builder categoría. Por ejemplo:

builder.SetCategory (Notification.CategoryCall);

La característica No interrumpir (nueva en Android 5.0) filtra las notificaciones en función de las categorías. Por ejemplo, la pantalla No interrumpir en Configuración permite al usuario excluir las notificaciones de llamadas telefónicas y mensajes:

No altere los conmutadores de pantalla.

Cuando el usuario configura No alterar para bloquear todas las interrupciones excepto las llamadas telefónicas (como se muestra en la captura de pantalla anterior), Android permite que se presenten notificaciones con una configuración de categoría de mientras el dispositivo está en modo No Notification.CategoryCall interrumpir. Tenga en Notification.CategoryAlarm cuenta que las notificaciones nunca se bloquean en el modo No interrumpir.

En el ejemplo LocalNotifications se muestra cómo usar para NotificationCompat.Builder iniciar una segunda actividad desde una notificación. Este código de ejemplo se explica en el tutorial Uso de notificaciones locales en Xamarin.Android.

Estilos de notificación

Para crear notificaciones de estilo de texto grande, imagen o bandeja de entrada con , la aplicación debe usar las versiones de compatibilidad NotificationCompat.Builder de estos estilos. Por ejemplo, para usar el estilo de texto grande, cree una instancia de NotificationCompat.BigTextstyle :

NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle();

// Plug this style into the builder:
builder.SetStyle (textStyle);

De forma similar, la aplicación puede usar y para los estilos Bandeja de entrada NotificationCompat.InboxStyle NotificationCompat.BigPictureStyle e Imagen, respectivamente.

Categoría y prioridad de notificación

NotificationCompat.Builder admite el SetPriority método (disponible a partir de Android 4.1). Sin embargo, el método no es compatible con porque las categorías forman parte del nuevo sistema de metadatos de notificación que se SetCategory NotificationCompat.Builder introdujo en Android 5.0.

Para admitir versiones anteriores de Android, donde no está disponible, el código puede comprobar el nivel de API en tiempo de ejecución para llamar condicionalmente cuando el nivel de API sea igual o mayor que SetCategory SetCategory Android 5.0 (nivel de API 21):

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
    builder.SetCategory (Notification.CategoryEmail);
}

En este ejemplo, la plataforma de destino de la aplicación se establece en Android 5.0 y la versión mínima de Android se establece en Android 4.1 (nivel de API 16). Dado que está disponible en el nivel de API 21 y versiones posteriores, este código de ejemplo llamará solo cuando esté disponible, no llamará a cuando el nivel de API sea menor SetCategory SetCategory que – SetCategory 21.

Visibilidad de la pantalla de bloqueo

Dado que Android no admite notificaciones de pantalla de bloqueo anteriores a Android 5.0 (nivel de API 21), NotificationCompat.Builder no admite el método SetVisibility . Como se explicó anteriormente para , el código puede comprobar el nivel de API en tiempo de ejecución y llamar SetCategory a solo cuando esté SetVisiblity disponible:

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
    builder.SetVisibility (Notification.Public);
}

Resumen

En este artículo se explica cómo crear notificaciones locales en Android. Ha descrito la anatomía de una notificación, ha explicado cómo usar para crear notificaciones, cómo dar estilo a las notificaciones en formatos de icono grande, Texto grande, Imagen e Bandeja de entrada, cómo establecer la configuración de metadatos de notificación, como prioridad, visibilidad y categoría, y cómo iniciar una actividad NotificationCompat.Builder desde una notificación. En este artículo también se describe cómo funcionan estas configuraciones de notificación con las nuevas características Desenlazadas, Pantalla de bloqueo y No alterar introducidas en Android 5.0. Por último, ha aprendido a usar para NotificationCompat.Builder mantener la compatibilidad de notificaciones con versiones anteriores de Android.

Para obtener instrucciones sobre el diseño de notificaciones para Android, vea Notificaciones.