Modificar um indicador de notificação

A partir da versão 8.0 (API nível 26), os indicadores de notificação (conhecidos também como pontos de notificação) aparecem no ícone da tela de início quando o app associado tem uma notificação ativa. Os usuários podem tocar no ícone do app e mantê-lo pressionado para exibir as notificações (ao lado de qualquer atalho do app), conforme mostrado na figura 1.

Esses pontos aparecem por padrão nos apps compatíveis com a tela de início e não há nenhuma ação necessária. No entanto, pode haver situações em que você não queira que o ponto de notificação apareça ou que queira controlar exatamente quais notificações serão exibidas.

Figura 1. Indicadores de notificação e menu exibido depois de tocar e manter pressionado.

Desativar a exibição de indicadores

Há casos em que os indicadores não fazem sentido para suas notificações. Sendo assim, você pode desativá-los por canal chamando setShowBadge(false) no objeto NotificationChannel.

Por exemplo, convém desativar os indicadores de notificação nas seguintes situações:

  • Notificações em andamento: a maioria das notificações em andamento, como processamento de imagem, controles de mídia ou instruções de navegação atuais, não faz sentido como indicador.
  • Lembretes da agenda: evite exibir indicadores para eventos que estejam ocorrendo no momento.
  • Eventos de relógio ou alarme: evite exibir indicadores para notificações relacionadas a alarmes atuais.

Este exemplo de código ilustra como ocultar indicadores para um canal de notificação:

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);
    

Definir contagem de notificações personalizada

Por padrão, cada notificação incrementa um número exibido no menu de pressionamento longo (mostrado na figura 1), mas você pode modificar esse número no app. Por exemplo, isso pode ser útil se você está usando apenas uma notificação para representar várias novas mensagens, mas quer que a contagem represente o número total de novas mensagens.

Para definir um número personalizado, chame setNumber() na notificação, conforme mostrado aqui:

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();
    

Modificar o ícone do menu de pressionamento longo de uma notificação

O menu de pressionamento longo exibe o ícone pequeno ou grande associado à uma notificação, se disponível. Por padrão, o sistema exibe o ícone grande, mas você pode chamar Notification.Builder.setBadgeIconType() e passar a constante BADGE_ICON_SMALL para exibir o ícone pequeno.

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();
    

Ocultar um atalho duplicado

Se seu app criar uma notificação que duplique um atalho, você poderá ocultar temporariamente o atalho enquanto a notificação estiver ativa chamando setShortcutId().

Para ver mais exemplos de códigos que usam notificações, consulte o Exemplo de notificações do Android (em inglês).