Modificar um ícone de notificação

A partir do Android 8.0 (API de nível 26), selos 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 um notificação ativa. Os usuários podem tocar e mantenha o ícone do aplicativo pressionado para revelar as notificações, junto com quaisquer atalhos de apps, conforme mostrado em Figura 1.

Esses pontos aparecem por padrão em apps da tela de início que oferecem suporte a eles, e há nada que o aplicativo precise fazer. No entanto, pode haver situações em que você você não quiser que o ponto de notificação apareça ou queira controlar exatamente quais notificações aparecem lá.

Figura 1. Insígnias de notificação e o botão de toque e menu suspenso.

Desativar a exibição de indicadores

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

Por exemplo, é possível desativar os balões de notificação nos seguintes situações:

  • Notificações em andamento: a maioria delas, como processamento de imagens, controles de mídia ou instruções de navegação atuais não fazem sentido como um selo.
  • Lembretes da agenda: evite usar a identificação de eventos que estejam ocorrendo no momento.
  • Eventos de relógio ou alarme: evite exibir indicadores para notificações relacionadas 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 segurar como mostrado na figura 1, mas é possível substituir esse número pelo aplicativo. Por exemplo, isso pode ser útil se você estiver usando apenas uma notificação para representam várias novas mensagens, mas quer que a contagem represente total de novas mensagens.

Para definir um número personalizado, ligue 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 toque e ícone do menu "Manter pressionado"

A função Tocar e menu suspenso exibe o ícone grande ou pequeno associado a uma se disponível. Por padrão, o sistema exibe o ícone grande, mas Você pode chamar Notification.Builder.setBadgeIconType() e transmita a 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

Caso seu app crie 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 Amostras de pessoas.