Modificare un badge di notifica

A partire da Android 8.0 (livello API 26), i badge di notifica, noti anche come indicatori di notifica, vengono visualizzati su un'icona di Avvio app quando l'app associata ha una notifica attiva. Gli utenti possono tenere premuta l'icona dell'app per visualizzare le notifiche, insieme a eventuali scorciatoie per le app, come mostrato nella Figura 1.

Questi puntini vengono visualizzati per impostazione predefinita nelle app di avvio che li supportano e la tua app non deve fare nulla. Tuttavia, potrebbero verificarsi situazioni in cui non vuoi che venga visualizzato il puntoni di notifica o vuoi controllare esattamente quali notifiche vengono visualizzate.

Figura 1. Badge delle notifiche e menu Tocca e tieni premuto.

Disattivare i badge

In alcuni casi i badge non hanno senso per le notifiche, quindi puoi disattivarli per singolo canale chiamando setShowBadge(false) sull'oggetto NotificationChannel.

Ad esempio, potresti voler disattivare i badge di notifica nelle seguenti situazioni:

  • Notifiche in corso: la maggior parte delle notifiche in corso, come l'elaborazione delle immagini, i controlli di riproduzione dei contenuti multimediali o le istruzioni di navigazione correnti, non ha senso come badge.
  • Promemoria di Calendar: evita di assegnare badge agli eventi che si verificano nell'ora corrente.
  • Eventi relativi all'orologio o alla sveglia: evita le notifiche con badge relative alle sveglie attive.

Il seguente codice di esempio mostra come nascondere i badge per un canale di notifica:

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

Impostare il conteggio delle notifiche personalizzate

Per impostazione predefinita, ogni notifica incrementa un numero visualizzato nel menu Tocca e tieni premuto, come mostrato nella figura 1, ma puoi sostituire questo numero per la tua app. Ad esempio, questa operazione potrebbe essere utile se utilizzi una sola notifica per rappresentare più nuovi messaggi, ma vuoi che il conteggio rappresenti il numero totale di nuovi messaggi.

Per impostare un numero personalizzato, chiama setNumber() nella notifica, come mostrato di seguito:

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

Modificare l'icona del menu Tocca e tieni premuta di una notifica

Il menu Tocca e tieni premuta mostra l'icona grande o piccola associata a una notifica, se disponibile. Per impostazione predefinita, il sistema mostra l'icona grande, ma puoi chiamare Notification.Builder.setBadgeIconType() e passare la costante BADGE_ICON_SMALL per visualizzare l'icona piccola.

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

Nascondere una scorciatoia duplicata

Se la tua app crea una notifica che duplica una scorciatoia per app, puoi nasconderla temporaneamente mentre la notifica è attiva chiamando setShortcutId().

Per altri esempi di codice che utilizzano le notifiche, consulta l'app di esempio SocialLite.