Creare e gestire canali di notifica

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 uditivo che applicate a tutte le notifiche del canale. Gli utenti possono modificare queste impostazioni e decidi quali canali di notifica della tua app possono essere invasivi visibile.

Guarda il seguente video per una panoramica dei canali e altre notifiche in Android 8.0.

Le impostazioni utente relative ai canali di notifica sono disponibili per ogni app in impostazioni di sistema, come mostrato nella Figura 1.

Figura 1. Impostazioni di notifica per l'app Orologio e uno dei suoi canali.

Dopo aver creato un canale di notifica, non puoi più modificarlo i comportamenti dei modelli, A quel punto l'utente ha il controllo completo. Tuttavia, puoi ancora modificare il nome e la descrizione di un canale.

Crea un canale per ogni tipo di notifica che vuoi inviare. Puoi anche Creare canali di notifica per riflettere le scelte degli utenti. Ad esempio, puoi impostare canali di notifica separati per ogni gruppo di conversazione creato a un utente in un'app di messaggistica.

Quando scegli come target Android 8.0 (livello API 26) o versioni successive, devi implementare una o più canali di notifica. Se targetSdkVersion è impostato su 25 o su un valore inferiore, se la tua app è installata su Android 8.0 (livello API 26) o versioni successive, si comporta allo stesso modo come su dispositivi con Android 7.1 (livello API 25) o versioni precedenti.

Creare un canale di notifica

Per creare un canale di notifica:

  1. Costruire un Oggetto NotificationChannel con un ID canale univoco, un nome visibile all'utente e un livello di importanza.

  2. (Facoltativo) Specifica la descrizione che l'utente vede nelle impostazioni di sistema con setDescription()

  3. Registra il canale di notifica passandolo a createNotificationChannel()

di Gemini Advanced.

L'esempio seguente mostra come creare e registrare un canale di notifica:

Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    val name = getString(R.string.channel_name)
    val descriptionText = getString(R.string.channel_description)
    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 = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(mChannel)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

Ricreare un canale di notifica esistente con i suoi valori originali non comporta quindi è sicuro chiamare questo codice all'avvio di un'app.

Per impostazione predefinita, tutte le notifiche pubblicate su un determinato canale utilizzano le immagini e comportamenti uditivi definiti dal livello di importanza NotificationManagerCompat come IMPORTANCE_DEFAULT o IMPORTANCE_HIGH Consulta la prossima sezione per ulteriori informazioni su livelli di importanza.

Se vuoi personalizzare ulteriormente i comportamenti di notifica predefiniti del tuo canale, è possibile richiamare metodi come enableLights(), setLightColor(), e setVibrationPattern() il giorno NotificationChannel. Ricorda che una volta creato il canale, non possono modificare queste impostazioni e l'utente ha il controllo finale sulla i comportamenti sono attivi.

Puoi anche creare più canali di notifica in una singola operazione chiamata createNotificationChannels()

Impostare il livello di importanza

L'importanza del canale influisce sul livello di interruzione di tutte le notifiche pubblicate in del canale. Specificalo nel costruttore NotificationChannel, utilizzando uno dei cinque livelli di importanza: IMPORTANCE_NONE(0) a IMPORTANCE_HIGH(4).

Per supportare i dispositivi con Android 7.1 (livello API 25) o versioni precedenti, devi inoltre chiamata setPriority() per ciascuna notifica, utilizzando una costante di priorità NotificationCompat .

L'importanza (NotificationManager.IMPORTANCE_*) e la priorità (NotificationCompat.PRIORITY_*) corrispondono all'importanza visibile all'utente come illustrato nella tabella seguente.

Livello di importanza visibile all'utente Importanza (Android 8.0 e versioni successive) Priorità (Android 7.1 e versioni precedenti)
Urgente
Emette un suono e viene visualizzato come notifica di avviso.
IMPORTANCE_HIGH PRIORITY_HIGH oppure PRIORITY_MAX
Alto
Emette un suono.
IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medio
Non emette alcun suono.
IMPORTANCE_LOW PRIORITY_LOW
Bassa
Non emette alcun suono e non viene visualizzato nella barra di stato.
IMPORTANCE_MIN PRIORITY_MIN
Nessuno
Non emette alcun suono e non viene visualizzato nella barra di stato o nell'area.
IMPORTANCE_NONE N/A

Tutte le notifiche, indipendentemente dall'importanza, vengono visualizzate in un sistema non invasivo Posizioni dell'interfaccia utente, ad esempio nel riquadro a scomparsa delle notifiche un badge sull'icona in Avvio applicazioni, anche se puoi modificare l'aspetto del badge di notifica.

Una volta inviato il canale al NotificationManager, non puoi cambiare il livello di importanza. Tuttavia, l'utente può modificare preferenze per i canali della tua app in qualsiasi momento.

Per informazioni sulla scelta di un livello di priorità appropriato, consulta la sezione livelli" nel Guida alla progettazione delle notifiche.

Leggi le impostazioni del canale di notifica

Gli utenti possono modificare le impostazioni per i canali di notifica, inclusi i comportamenti come vibrazione e suono di avviso. Se vuoi conoscere le impostazioni di un utente si applica ai tuoi canali di notifica:

  1. Ottieni l'oggetto NotificationChannel chiamando getNotificationChannel() o getNotificationChannels().

  2. Esegui query su impostazioni specifiche del canale, ad esempio getVibrationPattern(), getSound() e getImportance()

Se rilevi un'impostazione del canale che ritieni inibisca il comportamento previsto per la tua app, puoi suggerire all'utente di modificarla e compiere un'azione per apri le impostazioni del canale, come mostrato nella prossima sezione.

Apri le impostazioni del canale di notifica

Dopo aver creato un canale di notifica, non puoi più modificarlo i comportamenti visivi e uditivi del canale in modo programmatico. Solo l'utente può modificare i comportamenti dei canali dalle impostazioni di sistema. Per fornire agli utenti per accedere facilmente a queste impostazioni di notifica, aggiungi un elemento nella UI impostazioni che apre le impostazioni di sistema.

Puoi aprire le impostazioni di sistema per i canali di notifica con un Intent che utilizza il parametro ACTION_CHANNEL_NOTIFICATION_SETTINGS un'azione.

Ad esempio, il seguente codice di esempio mostra come reindirizzare un utente alla impostazioni per un canale di notifica:

Kotlin

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

Tieni presente che l'intent richiede due extra che specificano il nome del pacchetto dell'app (chiamato anche ID applicazione) e il canale da modificare.

Eliminare un canale di notifica

Puoi eliminare i canali di notifica chiamando deleteNotificationChannel() Il seguente codice di esempio mostra come completare questo processo:

Kotlin

// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)

Java

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);

Creare un gruppo di canali di notifica

Per organizzare ulteriormente l'aspetto dei canali nella UI delle impostazioni, puoi creare gruppi di canali. È una buona idea se la tua app supporta più account utente, ad esempio per profili di lavoro, perché consentono di creare gruppo di canali di notifica per ogni account. In questo modo gli utenti possono identificare facilmente e controllare più canali di notifica con nomi identici.

Figura 2. Impostazioni canale di notifica con gruppi per account personali e di lavoro.

Ad esempio, un'app di social network potrebbe includere supporto per il lavoro . In questo scenario, ogni account potrebbe richiedere più notifiche con funzioni e nomi identici, ad esempio:

  • Un account personale con due canali:

    • Nuovi commenti

    • Consigli sui post

  • Un account aziendale con due canali:

    • Nuovi commenti

    • Consigli sui post

L'organizzazione dei canali di notifica in gruppi per ogni account consente agli utenti distinguerli.

Ogni gruppo di canali di notifica richiede un ID, che deve essere univoco all'interno e un nome visibile all'utente. Il seguente snippet mostra come per creare un gruppo di canali di notifica.

Kotlin

// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new 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 alla gestione notifiche, non potrai più modificare associazione tra canale di notifica e gruppo.