À partir d'Android 8.0 (niveau d'API 26), toutes les notifications doivent être attribuées à un canal. Pour chaque canal, vous pouvez définir le comportement visuel et auditif appliqué à toutes les notifications du canal. Les utilisateurs peuvent modifier ces paramètres et choisir les canaux de notification de votre application qui peuvent être intrusifs ou visibles.
Regardez la vidéo suivante pour un aperçu des canaux et d'autres fonctionnalités de notification dans Android 8.0.
Les paramètres utilisateur des canaux de notification sont disponibles pour chaque application dans les paramètres système, comme illustré dans la figure 1.
Une fois que vous avez créé un canal de notification, vous ne pouvez plus modifier le comportement des notifications. L'utilisateur a le contrôle total à ce stade. Toutefois, vous pouvez toujours modifier le nom et la description d'une chaîne.
Créez un canal pour chaque type de notification à envoyer. Vous pouvez également créer des canaux de notification pour refléter les choix effectués par les utilisateurs. Par exemple, vous pouvez configurer des canaux de notification distincts pour chaque groupe de conversation créé par un utilisateur dans une application de chat.
Lorsque vous ciblez Android 8.0 (niveau d'API 26) ou une version ultérieure, vous devez implémenter un ou plusieurs canaux de notification. Si votre targetSdkVersion
est définie sur 25 ou moins, lorsque votre application s'exécute sous Android 8.0 (niveau d'API 26) ou version ultérieure, elle se comporte de la même manière que sur les appareils équipés d'Android 7.1 (niveau d'API 25) ou version antérieure.
Créer un canal de notification
Pour créer un canal de notification, procédez comme suit:
Créez un objet
NotificationChannel
avec un ID de chaîne unique, un nom visible par l'utilisateur et un niveau d'importance.Vous pouvez également spécifier la description que l'utilisateur verra dans les paramètres système avec
setDescription()
.Enregistrez le canal de notification en le transmettant à
createNotificationChannel()
.
L'exemple suivant montre comment créer et enregistrer un canal de notification:
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); } }
La recréation d'un canal de notification existant avec ses valeurs d'origine n'entraîne aucune opération. Vous pouvez donc appeler ce code en toute sécurité lors du démarrage d'une application.
Par défaut, toutes les notifications publiées sur un canal donné utilisent les comportements visuels et auditifs définis par le niveau d'importance de la classe NotificationManagerCompat
, tels que IMPORTANCE_DEFAULT
ou IMPORTANCE_HIGH
.
Consultez la section suivante pour plus d'informations sur les niveaux d'importance.
Si vous souhaitez personnaliser davantage les comportements de notification par défaut de votre chaîne, vous pouvez appeler des méthodes telles que enableLights()
, setLightColor()
et setVibrationPattern()
sur la NotificationChannel
. N'oubliez pas qu'une fois le canal créé, vous ne pouvez pas modifier ces paramètres et que l'utilisateur a le contrôle final sur l'activation ou non de ces comportements.
Vous pouvez également créer plusieurs canaux de notification en une seule opération en appelant createNotificationChannels()
.
Définir le niveau d'importance
L'importance du canal affecte le niveau d'interruption de toutes les notifications publiées sur la chaîne. Spécifiez-le dans le constructeur NotificationChannel
, en utilisant l'un des cinq niveaux d'importance, allant de IMPORTANCE_NONE(0)
à IMPORTANCE_HIGH(4)
.
Pour prendre en charge les appareils équipés d'Android 7.1 (niveau d'API 25) ou version antérieure, vous devez également appeler setPriority()
pour chaque notification, en utilisant une constante de priorité de la classe NotificationCompat
.
Les constantes d'importance (NotificationManager.IMPORTANCE_*
) et de priorité (NotificationCompat.PRIORITY_*
) correspondent aux options d'importance visibles par l'utilisateur, comme indiqué dans le tableau suivant.
Niveau d'importance visible par l'utilisateur | Importance (Android 8.0 ou version ultérieure) | Priorité (Android 7.1 et versions antérieures) |
---|---|---|
Urgent Émet un son et s'affiche sous la forme d'une notification prioritaire. |
IMPORTANCE_HIGH |
PRIORITY_HIGH ou PRIORITY_MAX |
Élevée Émet un son. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
Moyenne N'émet aucun son. |
IMPORTANCE_LOW |
PRIORITY_LOW |
Faible N'émet aucun son et n'apparaît pas dans la barre d'état. |
IMPORTANCE_MIN |
PRIORITY_MIN |
Aucun N'émet aucun son et n'apparaît pas dans la barre d'état ni dans le volet. |
IMPORTANCE_NONE |
N/A |
Toutes les notifications, quelle que soit leur importance, s'affichent aux emplacements de l'UI du système non intrusives, par exemple dans le panneau des notifications et sous la forme d'un badge sur l'icône de lanceur. Vous pouvez toutefois modifier l'apparence du badge de notification.
Une fois la chaîne envoyée à la méthode NotificationManager
, vous ne pouvez plus modifier le niveau d'importance. Toutefois, l'utilisateur peut modifier à tout moment ses préférences concernant les canaux de votre application.
Pour plus d'informations sur le choix d'un niveau de priorité approprié, consultez la section "Niveaux de priorité" du Guide de conception des notifications.
Lire les paramètres du canal de notification
Les utilisateurs peuvent modifier les paramètres des canaux de notification, y compris les comportements tels que les vibrations et les sons d'alerte. Pour connaître les paramètres qu'un utilisateur applique à vos canaux de notification, procédez comme suit:
Obtenez l'objet
NotificationChannel
en appelantgetNotificationChannel()
ougetNotificationChannels()
.Interrogez des paramètres de canal spécifiques, tels que
getVibrationPattern()
,getSound()
etgetImportance()
.
Si vous détectez un paramètre de version qui, selon vous, empêche le comportement souhaité de votre application, vous pouvez suggérer à l'utilisateur de le modifier et de fournir une action pour ouvrir les paramètres de la version, comme indiqué dans la section suivante.
Ouvrir les paramètres du canal de notification
Une fois que vous avez créé un canal de notification, vous ne pouvez plus modifier ses comportements visuels et sonores de manière programmatique. Seul l'utilisateur peut modifier le comportement du canal à partir des paramètres système. Pour permettre à vos utilisateurs d'accéder facilement à ces paramètres de notification, ajoutez un élément dans l'interface utilisateur des paramètres de votre application qui ouvre ces paramètres système.
Vous pouvez ouvrir les paramètres système des canaux de notification avec un Intent
qui utilise l'action ACTION_CHANNEL_NOTIFICATION_SETTINGS
.
Par exemple, l'exemple de code suivant montre comment rediriger un utilisateur vers les paramètres d'un canal de notification:
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);
Notez que l'intent nécessite deux extras qui spécifient le nom du package de votre application (également appelé ID application) et le canal à modifier.
Supprimer un canal de notification
Vous pouvez supprimer des canaux de notification en appelant deleteNotificationChannel()
.
L'exemple de code suivant montre comment effectuer ce processus:
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);
Créer un groupe de canaux de notification
Si vous souhaitez organiser davantage l'apparence de vos canaux dans l'interface utilisateur des paramètres, vous pouvez créer des groupes de canaux. C'est une bonne idée lorsque votre application est compatible avec plusieurs comptes utilisateur, par exemple pour les profils professionnels, car cela vous permet de créer un groupe de canaux de notification pour chaque compte. De cette façon, les utilisateurs peuvent facilement identifier et contrôler plusieurs canaux de notification portant des noms identiques.
Par exemple, une application de réseau social peut prendre en charge les comptes personnels et professionnels. Dans ce scénario, chaque compte peut nécessiter plusieurs canaux de notification ayant des fonctions et des noms identiques, par exemple:
Un compte personnel avec deux chaînes:
Nouveaux commentaires
Publier des recommandations
Un compte professionnel avec deux chaînes:
Nouveaux commentaires
Publier des recommandations
L'organisation des canaux de notification en groupes pour chaque compte permet aux utilisateurs de les distinguer.
Chaque groupe de canaux de notification nécessite un ID, qui doit être unique au sein de votre package, ainsi qu'un nom visible par l'utilisateur. L'extrait de code suivant montre comment créer un groupe de canaux de notification.
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));
Après avoir créé un groupe, vous pouvez appeler setGroup()
pour lui associer un nouvel objet NotificationChannel
.
Une fois le canal soumis au gestionnaire de notifications, vous ne pouvez plus modifier l'association entre le canal et le groupe de notifications.