Modificar um ícone de notificação

No Android 8.0 (nível 26 da API) e versões mais recentes, os indicadores de notificação, também conhecidos como pontos de notificação, aparecem em um ícone na 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 revelar as notificações, junto com quaisquer atalhos de apps, conforme mostrado na Figura 1.

Esses pontos aparecem por padrão em apps de tela de início compatíveis, e não é necessário que o app faça nada. No entanto, pode haver situações em que você não queira que o ponto de notificação apareça ou queira controlar exatamente quais notificações aparecem lá.

Figura 1. Indicadores de notificação e menu "Tocar e manter pressionado".

Desativar a exibição de indicadores

Há casos em que os selos não fazem sentido para suas notificações. Portanto, 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 imagens, controles de mídia ou instruções de navegação atuais, não faz sentido como um ícone.
  • Lembretes da agenda: evite exibir indicadores de eventos que estejam ocorrendo no momento.
  • Eventos de relógio ou alarme: evite mostrar indicadores de notificações relacionados a alarmes atuais.

O exemplo de código a seguir demonstra como ocultar selos 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 "Tocar e pressionar", como mostrado na Figura 1, mas você pode substituir esse número no seu app. Isso pode ser útil se você estiver usando apenas uma notificação para representar várias novas mensagens, mas quiser 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 "Tocar e pressionar " de uma notificação

O menu "Tocar e manter pressionado" exibe o ícone grande ou pequeno associado a uma notificação, se disponível. Por padrão, o sistema mostra o ícone grande, mas você pode chamar Notification.Builder.setBadgeIconType() e transmitir a constante BADGE_ICON_SMALL para mostrar 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 o 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ódigo que usa notificações, consulte o exemplo de Pessoas (link em inglês).