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 notificaciones) 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 la app, como se muestra en la figura 1.

Estos puntos aparecen de forma predeterminada en las apps de Launcher que los admiten y tu app no necesita realizar ninguna acción. Sin embargo, es posible que en algunas situaciones no quieras que aparezca un punto de notificación o quieras controlar exactamente qué notificaciones se muestran allí.

Figura 1: Insignias de notificación y menú de mantener presionada la pantalla

Cómo inhabilitar las insignias

Hay casos en los que no tiene sentido incluir insignias en las notificaciones, por lo que puedes inhabilitarlas en cada canal. Para ello, llama a setShowBadge(false) en tu objeto NotificationChannel.

Por ejemplo, es posible que quieras inhabilitar las insignias de notificaciones en las siguientes situaciones:

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

En el siguiente ejemplo de código, 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 un número que se muestra en el menú de mantener presionado, como se muestra en la figura 1, pero puedes anularlo en tu app. Por ejemplo, esto podría resultar útil si usas una sola notificación para representar varios mensajes nuevos, pero quieres que el recuento represente la cantidad total de mensajes nuevos.

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

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, en el sistema se muestra el ícono grande, pero puedes llamar a Notification.Builder.setBadgeIconType() y pasarle la constante BADGE_ICON_SMALL para que se muestre 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 por medio de una llamada a setShortcutId().

Para ver más códigos de ejemplo que usan notificaciones, consulta la app de ejemplo de SociaLite.