A partire da Android 8.0 (livello API 26), tutte le notifiche devono essere assegnate a un canale. Per ogni canale, puoi impostare il comportamento visivo e acustico che viene applicato a tutte le notifiche di quel canale. Gli utenti possono modificare queste impostazioni e decidere quali canali di notifica della tua app possono essere invasivi o visibili.
Guarda il seguente video per una panoramica dei canali e di altre funzionalità di notifica in Android 8.0.
Le impostazioni utente per i canali di notifica sono disponibili per ogni app nelle impostazioni di sistema, come mostrato nella figura 1.
Dopo aver creato un canale di notifica, non puoi modificare i comportamenti di notifica. A quel punto, l'utente ha il controllo completo. Tuttavia, puoi comunque modificare il nome e la descrizione di un canale.
Crea un canale per ogni tipo di notifica che devi inviare. Puoi anche creare canali di notifica per riflettere le scelte effettuate dagli utenti. Ad esempio, puoi configurare canali di notifica separati per ogni gruppo di conversazione creato da un utente in un'app di messaggistica.
Quando scegli come target Android 8.0 (livello API 26) o versioni successive, devi implementare uno o più canali di notifica. Se targetSdkVersion è impostato su 25 o un valore inferiore,
quando l'app viene eseguita su Android 8.0 (livello API 26) o versioni successive, si comporta allo stesso modo
che sui dispositivi con Android 7.1 (livello API 25) o versioni precedenti.
Creazione di un canale di notifica
Per creare un canale di notifica, segui questi passaggi:
Crea un oggetto
NotificationChannelcon un ID canale univoco, un nome visibile all'utente e un livello di importanza.Facoltativamente, specifica la descrizione che l'utente vede nelle impostazioni di sistema con
setDescription().Registra il canale di notifica passandolo a
createNotificationChannel().
L'esempio seguente mostra come creare e registrare un canale di notifica:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Create the NotificationChannel. val importance = NotificationManager.IMPORTANCE_DEFAULT val mChannel = NotificationChannel(CHANNEL_ID, name, importance) mChannel.description = descriptionText // Register the channel with the system. You can't change the importance // or other notification behaviors after this. val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager?.createNotificationChannel(mChannel) }
La ricreazione di un canale di notifica esistente con i suoi valori originali non esegue alcuna operazione, quindi è sicuro chiamare questo codice all'avvio di un'app.
Per impostazione predefinita, tutte le notifiche pubblicate su un determinato canale utilizzano i comportamenti visivi e uditivi definiti dal livello di importanza della classe NotificationManagerCompat, ad esempio IMPORTANCE_DEFAULT o IMPORTANCE_HIGH. Per saperne di più sui livelli di importanza, consulta la sezione successiva.
Se vuoi personalizzare ulteriormente i comportamenti di notifica predefiniti del canale,
puoi chiamare metodi come enableLights(), setLightColor()
e setVibrationPattern() su NotificationChannel. Ricorda che, una volta creato il canale, non puoi modificare queste impostazioni e l'utente ha il controllo finale sull'attivazione di questi comportamenti.
Puoi anche creare più canali di notifica in un'unica operazione chiamando createNotificationChannels().
Imposta il livello di importanza
L'importanza del canale influisce sul livello di interruzione di tutte le notifiche pubblicate nel canale. Specificalo nel costruttore NotificationChannel, utilizzando uno dei cinque livelli di importanza, da IMPORTANCE_NONE(0) a IMPORTANCE_HIGH(4).
Per supportare i dispositivi con Android 7.1 (livello API 25) o versioni precedenti, devi anche chiamare setPriority() per ogni notifica, utilizzando una costante di priorità della classe NotificationCompat.
Le costanti di importanza (NotificationManager.IMPORTANCE_*) e priorità (NotificationCompat.PRIORITY_*) vengono mappate alle opzioni di importanza visibili all'utente, come mostrato nella tabella seguente.
| Livello di importanza visibile all'utente | Importanza (Android 8.0 e versioni successive) | Priorità (Android 7.1 e versioni precedenti) |
|---|---|---|
| Urgente Viene emesso un suono e la notifica viene visualizzata in evidenza. |
IMPORTANCE_HIGH |
PRIORITY_HIGH o PRIORITY_MAX |
| Alta Viene emesso un suono. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| Media Non emette alcun suono. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| Bassa Non viene emesso alcun suono e la notifica non viene visualizzata nella barra di stato. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| Nessuna Non viene emesso alcun suono e la notifica non viene visualizzata nella barra di stato o nell'area di notifica. |
IMPORTANCE_NONE |
N/A |
Tutte le notifiche, indipendentemente dall'importanza, vengono visualizzate in posizioni della UI di sistema non invasive, ad esempio nel riquadro a scomparsa delle notifiche e come badge sull'icona in Avvio applicazioni, anche se puoi modificare l'aspetto del badge di notifica.
Una volta inviato il canale a NotificationManager, non puoi modificare il livello di importanza. Tuttavia, l'utente può modificare le proprie preferenze per i canali della tua app in qualsiasi momento.
Per informazioni sulla scelta di un livello di priorità appropriato, consulta "Livelli di priorità" nella guida alla progettazione delle notifiche.
Leggi le impostazioni del canale di notifica
Gli utenti possono modificare le impostazioni dei canali di notifica, inclusi i comportamenti come la vibrazione e il suono di avviso. Se vuoi conoscere le impostazioni applicate da un utente ai tuoi canali di notifica, segui questi passaggi:
Recupera l'oggetto
NotificationChannelchiamandogetNotificationChannel()ogetNotificationChannels().Esegui query su impostazioni specifiche del canale, come
getVibrationPattern(),getSound()egetImportance().
Se rilevi un'impostazione del canale che ritieni impedisca il comportamento previsto per la tua app, puoi suggerire all'utente di modificarla e fornire un'azione per aprire le impostazioni del canale, come mostrato nella sezione successiva.
Apri le impostazioni del canale di notifica
Dopo aver creato un canale di notifica, non puoi modificare in modo programmatico i comportamenti visivi e uditivi del canale di notifica. Solo l'utente può modificare i comportamenti dei canali dalle impostazioni di sistema. Per fornire agli utenti un accesso rapido a queste impostazioni di notifica, aggiungi un elemento nell'interfaccia utente delle impostazioni dell'app che apra queste impostazioni di sistema.
Puoi aprire le impostazioni di sistema per i canali di notifica con un
Intent che utilizza l'azione
ACTION_CHANNEL_NOTIFICATION_SETTINGS.
Ad esempio, il seguente codice campione mostra come reindirizzare un utente alle impostazioni di un canale di notifica:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID) } Button(onClick = { context.startActivity(intent) }) { Text("Open Channel Settings") }
Tieni presente che l'intent richiede due extra che specificano il nome del pacchetto dell'app (noto anche come ID applicazione) e il canale da modificare.
Eliminazione di un canale di notifica
Puoi eliminare i canali di notifica chiamando
deleteNotificationChannel().
Il seguente codice campione mostra come completare questa procedura:
val notificationManager = ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java) notificationManager?.deleteNotificationChannel(channelId)
Crea un gruppo di canali di notifica
Se vuoi organizzare ulteriormente l'aspetto dei canali nella UI delle impostazioni, puoi creare gruppi di canali. Questa è una buona idea quando la tua app supporta più account utente, perché ti consente di creare un gruppo di canali di notifica per ogni account. I gruppi di canali aiutano gli utenti a distinguere e controllare più canali di notifica con nomi identici.
Ad esempio, un'app di social networking potrebbe includere il supporto per account personali e di lavoro. In questo scenario, ogni account potrebbe richiedere più canali di notifica con funzioni e nomi identici, ad esempio:
Un account personale con due canali:
Nuovi commenti
Consigli per i post
Un account aziendale con due canali:
Nuovi commenti
Consigli per i post
L'organizzazione dei canali di notifica in gruppi per ogni account consente agli utenti di distinguerli.
Ogni gruppo di canali di notifica richiede un ID, che deve essere univoco all'interno del tuo pacchetto, nonché un nome visibile all'utente. Il seguente snippet mostra come creare un gruppo di canali di notifica.
fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) { val notificationManager = ContextCompat.getSystemService(context, NotificationManager::class.java) notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName)) }
Dopo aver creato un nuovo gruppo, puoi chiamare
setGroup()
per associare un nuovo oggetto NotificationChannel al gruppo.
Una volta inviato il canale al gestore delle notifiche, non puoi modificare l'associazione tra canale di notifica e gruppo.