Cómo modificar una insignia de notificación

A partir de Android 8.0 (nivel de API 26), las insignias de notificaciones, también conocidas como puntos de notificación, aparecen en un ícono de selector cuando la app asociada tiene una notificación activa. Los usuarios pueden mantener presionado el ícono de la app para mostrar las notificaciones, junto con los accesos directos a apps, como se muestra en la figura 1.

Estos puntos aparecen de forma predeterminada en las apps de selector que los admiten, y tu app no necesita hacer nada. Sin embargo, puede haber situaciones en las que no quieras que aparezca el punto de notificación o quieras controlar exactamente qué notificaciones aparecen allí.

Figura 1: Las insignias de notificación y el menú de mantener presionado

Cómo inhabilitar las insignias

Hay casos en los que las insignias no tienen sentido para las notificaciones, por lo que puedes inhabilitarlas por canal si llamas a setShowBadge(false) en tu objeto NotificationChannel.

Por ejemplo, es posible que quieras inhabilitar las insignias de notificación en las siguientes situaciones:

  • Notificaciones continuas: La mayoría de las notificaciones continuas, como el procesamiento de imágenes, los controles de reproducción de contenido multimedia o las instrucciones de navegación actuales, no tienen sentido como insignias.
  • Recordatorios del calendario: Evita usar insignias en eventos que ocurran en el momento actual.
  • Eventos de alarma o reloj: Evita las notificaciones con insignias relacionadas con las alarmas actuales.

En el siguiente código de ejemplo, se muestra cómo ocultar insignias en un canal de notificaciones:

Kotlin

val id = "my_channel_01"
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_LOW
val mChannel = NotificationChannel(id, name, importance).apply {
    description = descriptionText
    setShowBadge(false)
}
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)

Java

String id = "my_channel_01";
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.setShowBadge(false);

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(mChannel);

Cómo establecer un recuento personalizado de notificaciones

De forma predeterminada, cada notificación aumenta el número que se muestra en el menú de mantener presionado, como se muestra en la figura 1, pero puedes anular ese número en tu app. Por ejemplo, este podría ser útil si usas una sola notificación para representar varios mensajes nuevos, pero deseas que el recuento represente el total de mensajes nuevos.

Para configurar un número personalizado, llama a setNumber() en la notificación, como se muestra a continuación:

Kotlin

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build()

Java

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setNumber(messageCount)
        .build();

Cómo modificar el ícono de menú de mantener presionado de una notificación

En el menú de mantener presionado, se muestra el ícono grande o pequeño asociado con una notificación, si está disponible. De forma predeterminada, el sistema muestra el ícono grande, pero puedes llamar a Notification.Builder.setBadgeIconType() y pasar la constante BADGE_ICON_SMALL para mostrar el ícono pequeño.

Kotlin

var notification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build()

Java

Notification notification = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
        .setContentTitle("New Messages")
        .setContentText("You've received 3 new messages.")
        .setSmallIcon(R.drawable.ic_notify_status)
        .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
        .build();

Cómo ocultar un acceso directo duplicado

Si tu app crea una notificación que duplica el acceso directo a una app, puedes ocultarlo temporalmente mientras la notificación está activa llamando a setShortcutId().

Para ver más códigos de muestra que usan notificaciones, consulta Ejemplo de personas.