A partir de Android 8.0 (nivel de API 26), todas las notificaciones deben asignarse a un canal. Para cada canal, puedes establecer el comportamiento visual y auditivo que se aplica a todas las notificaciones de ese canal. Los usuarios pueden cambiar estos parámetros de configuración y decidir qué canales de notificaciones de tu app pueden ser intrusivos o visibles.
Mira el siguiente video para obtener una descripción general de los canales y otras funciones de notificación en Android 8.0.
La configuración de usuario para los canales de notificaciones está disponible para cada app en la configuración del sistema, como se muestra en la figura 1.
Después de crear un canal de notificaciones, no puedes cambiar los comportamientos de las notificaciones. En ese punto, el usuario tiene el control total. Sin embargo, puedes cambiar el nombre y la descripción de un canal.
Crea un canal para cada tipo de notificación que necesites enviar. También puedes crear canales de notificaciones para reflejar las elecciones que hicieron los usuarios. Por ejemplo, puedes configurar canales de notificaciones independientes para cada grupo de conversación que cree un usuario en una app de mensajería.
Cuando segmentas para Android 8.0 (nivel de API 26) o versiones posteriores, debes implementar uno o más canales de notificaciones. Si tu targetSdkVersion se establece en 25 o un valor inferior,
cuando tu app se ejecute en Android 8.0 (nivel de API 26) o una versión posterior, se comportará de la misma manera
que en los dispositivos que ejecutan Android 7.1 (nivel de API 25) o una versión anterior.
Crea un canal de notificaciones
Para crear un canal de notificaciones, sigue estos pasos:
Crea un objeto
NotificationChannelcon un ID de canal único, un nombre visible para el usuario y un nivel de importancia.De manera opcional, especifica la descripción que el usuario ve en la configuración del sistema con
setDescription().Registra el canal de notificaciones pasándolo a
createNotificationChannel().
En el siguiente ejemplo, se muestra cómo crear y registrar un canal de notificaciones:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
Volver a crear un canal de notificaciones existente con sus valores originales no realiza ninguna operación, por lo que es seguro llamar a este código cuando se inicia una app.
De forma predeterminada, todas las notificaciones publicadas en un canal determinado usan los comportamientos visuales y auditivos definidos por el nivel de importancia de la clase NotificationManagerCompat, como IMPORTANCE_DEFAULT o IMPORTANCE_HIGH. Consulta la siguiente sección para obtener más información sobre los
niveles de importancia.
Si quieres personalizar aún más los comportamientos de notificación predeterminados de tu canal,
puedes llamar a métodos como enableLights(), setLightColor()
y setVibrationPattern() en NotificationChannel. Recuerda que,
una vez que creas el canal, no puedes cambiar estos parámetros de configuración, y el usuario tiene
el control final sobre si estos comportamientos están activos.
También puedes crear varios canales de notificaciones en una sola operación llamando a
createNotificationChannels().
Cómo establecer el nivel de importancia
La importancia del canal afecta el nivel de interrupción de todas las notificaciones publicadas en él. Especifica la importancia en el constructor NotificationChannel con uno de los cinco niveles de importancia, que van de IMPORTANCE_NONE(0) a IMPORTANCE_HIGH(4).
Para admitir dispositivos que ejecutan Android 7.1 (nivel de API 25) o versiones anteriores, también debes llamar a setPriority() para cada notificación, con una constante de prioridad de la clase NotificationCompat.
Las constantes de importancia (NotificationManager.IMPORTANCE_*) y prioridad (NotificationCompat.PRIORITY_*) se asignan a las opciones de importancia visibles para el usuario, como se muestra en la siguiente tabla.
| Nivel de importancia visible para el usuario | Importancia (Android 8.0 y versiones posteriores) | Prioridad (Android 7.1 y versiones anteriores) |
|---|---|---|
| Urgente Emite un sonido y aparece como una notificación de atención. |
IMPORTANCE_HIGH |
PRIORITY_HIGH o PRIORITY_MAX |
| Alta Emite un sonido. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Media No emite sonido. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Baja No emite sonido ni aparece en la barra de estado. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Ninguna No emite sonido ni aparece en la barra de estado ni en el panel. |
IMPORTANCE_NONE |
N/A |
Todas las notificaciones, independientemente de su importancia, aparecen en ubicaciones de la IU del sistema que no son de interrupción, como en el panel lateral de notificaciones y como un globo en el ícono de selector, aunque puedes modificar la apariencia del globo de notificación.
Una vez que envíes el canal a NotificationManager, no podrás cambiar el nivel de importancia. Sin embargo, el usuario puede cambiar sus preferencias para los canales de tu app en cualquier momento.
Para obtener información sobre cómo elegir un nivel de prioridad adecuado, consulta "Niveles de prioridad" en la guía de diseño de notificaciones.
Cómo leer la configuración del canal de notificaciones
Los usuarios pueden modificar la configuración de los canales de notificaciones, incluidos los comportamientos, como la vibración y el sonido de alerta. Si quieres conocer la configuración que un usuario aplica a tus canales de notificaciones, sigue estos pasos:
Obtén el objeto
NotificationChannelllamando agetNotificationChannel()ogetNotificationChannels().Consulta la configuración específica del canal, como
getVibrationPattern(),getSound()ygetImportance().
Si detectas un parámetro de configuración de canal que crees que inhibe el comportamiento previsto para tu app, puedes sugerirle al usuario que lo cambie y proporcionarle una acción para abrir la configuración del canal, como se muestra en la siguiente sección.
Cómo abrir la configuración del canal de notificaciones
Después de crear un canal de notificaciones, no puedes cambiar sus comportamientos visuales y auditivos de manera programática. Solo el usuario puede cambiar los comportamientos del canal desde la configuración del sistema. Para proporcionarles a los usuarios acceso rápido a estos parámetros de configuración de notificaciones, agrega un elemento en la IU de configuración de tu app que abra estos parámetros de configuración del sistema.
Puedes abrir la configuración del sistema para los canales de notificaciones con un Intent que use la acción ACTION_CHANNEL_NOTIFICATION_SETTINGS.
Por ejemplo, en el siguiente código de muestra, se indica cómo puedes redireccionar a un usuario a la configuración de un canal de notificaciones:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
Ten en cuenta que el intent requiere dos elementos adicionales que especifiquen el nombre del paquete de tu app (también conocido como ID de aplicación) y el canal que se editará.
Borra un canal de notificaciones
Para borrar canales de notificaciones, llama a
deleteNotificationChannel().
En el siguiente código de muestra, se indica cómo completar este proceso:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
Cómo crear un grupo de canales de notificaciones
Si quieres organizar aún más la apariencia de tus canales en la IU de configuración, puedes crear grupos de canales. Esta es una buena idea cuando tu app admite varias cuentas de usuario, ya que te permite crear un grupo de canales de notificaciones para cada cuenta. Los grupos de canales ayudan a los usuarios a diferenciar y controlar varios canales de notificaciones que tienen nombres idénticos.
Por ejemplo, una app de redes sociales podría incluir compatibilidad con cuentas personales y laborales. En esta situación, cada cuenta puede requerir varios canales de notificaciones con funciones y nombres idénticos, como los siguientes:
Una cuenta personal con dos canales:
Comentarios nuevos
Recomendaciones de publicaciones
Una cuenta comercial con dos canales:
Comentarios nuevos
Recomendaciones de publicaciones
Organizar los canales de notificaciones en grupos para cada cuenta permite que los usuarios los distingan.
Cada grupo de canales de notificaciones requiere un ID, que debe ser único dentro de tu paquete, y un nombre visible para el usuario. En el siguiente fragmento, se muestra cómo crear un grupo de canales de notificaciones.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
Después de crear un grupo nuevo, puedes llamar a setGroup() para asociar un objeto NotificationChannel nuevo con el grupo.
Una vez que envías el canal al administrador de notificaciones, no puedes cambiar la asociación entre el canal de notificaciones y el grupo.