Modifier un badge de notification

À partir d'Android 8.0 (niveau d'API 26), les badges de notification (également appelés "points de notification") s'affichent sur une icône de lanceur lorsque l'application associée dispose d'une notification active. Les utilisateurs peuvent appuyer de manière prolongée sur l'icône de l'application pour afficher les notifications, ainsi que les raccourcis d'application, comme illustré dans la figure 1.

Ces points apparaissent par défaut dans les applications de lanceur qui les prennent en charge, et votre application n'a rien à faire. Toutefois, il peut arriver que vous ne souhaitiez pas que le point de notification s'affiche ou que vous souhaitiez contrôler exactement les notifications qui s'affichent.

Figure 1 : Badges de notification et menu accessible en appuyant de manière prolongée.

Désactiver le badging

Dans certains cas, les badges n'ont pas de sens pour vos notifications. Vous pouvez donc les désactiver par canal en appelant setShowBadge(false) sur votre objet NotificationChannel.

Par exemple, vous pouvez désactiver les badges de notification dans les situations suivantes:

  • Notifications en cours: la plupart des notifications en cours, telles que le traitement des images, les commandes de lecture multimédia ou les instructions de navigation en cours, n'ont pas de sens en tant que badge.
  • Rappels Agenda: évitez d'ajouter un badge aux événements qui se produisent à l'heure actuelle.
  • Événements d'horloge ou d'alarme: évitez les notifications de badge liées aux alarmes en cours.

L'exemple de code suivant montre comment masquer les badges d'un canal de notification:

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

Définir le nombre de notifications personnalisées

Par défaut, chaque notification incrémente un nombre affiché dans le menu "Appuyer de manière prolongée", comme illustré dans la figure 1, mais vous pouvez remplacer ce nombre pour votre application. Par exemple, cela peut être utile si vous n'utilisez qu'une seule notification pour représenter plusieurs nouveaux messages, mais que vous souhaitez que le nombre représente le nombre total de nouveaux messages.

Pour définir un numéro personnalisé, appelez setNumber() sur la notification, comme illustré ci-dessous:

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

Modifier l'icône du menu d'une notification en appuyant de manière prolongée

Le menu d'appui prolongé affiche l'icône grande ou petite associée à une notification, le cas échéant. Par défaut, le système affiche la grande icône, mais vous pouvez appeler Notification.Builder.setBadgeIconType() et transmettre la constante BADGE_ICON_SMALL pour afficher la petite icône.

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

Masquer un raccourci en double

Si votre application crée une notification qui duplique un raccourci d'application, vous pouvez masquer temporairement le raccourci lorsque la notification est active en appelant setShortcutId().

Pour obtenir d'autres exemples de code utilisant des notifications, consultez l'exemple d'application Socialite.