Cómo modificar una insignia de notificación

A partir de la versión 8.0 (API nivel 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 a fin de mostrar las notificaciones (junto con los accesos directos a aplicaciones), 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 presión prolongada

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: En 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 es necesario incluir 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 del momento.

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 manera predeterminada, cada notificación aumenta el número que se muestra en el menú de presión prolongada (visible en la figura 1), pero puedes anularlo en tu app. Por ejemplo, este podría resultar útil si usas una sola notificación a fin de representar varios mensajes nuevos, pero quieres representar 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 presión prolongada de una notificación

En el menú de presión prolongada, 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 este ejemplo de notificaciones de Android.