Créer une notification. | ![]() |
La classe NotificationManager :
Les notifications sont basées sur cette classe pour informer l’utilisateur des événements qui se produisent. C'est une manière de l'informer que quelque chose s’est passé en arrière-plan.
Les notifications peuvent prendre différentes formes :
La classe NotificationChannel (type public final) :
À partir d’Android 8.0 (API niveau 26), toutes les notifications doivent être attribuées à un canal sinon elles ne seront pas affichées.
En catégorisant les notifications en canaux, les utilisateurs peuvent maintenant désactiver certains canaux de notification pour une application individualisée (au lieu de désactiver toutes les notifications), et contrôler les options visuelles et auditives pour chaque canal, à partir des paramètres du système Android.
Les utilisateurs peuvent également en appuyant longuement sur une notification, modifier les comportements du canal associé (Arrêter les notifications/ Continuer d'afficher les notifications).
Ainsi une application peut avoir plusieurs canaux de notification – un canal distinct pour chaque type de notification, et aussi créer des canaux de notification en réponse aux choix faits par les utilisateurs de votre application. Par exemple, vous pouvez configurer des canaux de notification distincts pour chaque groupe de conversation créé par un utilisateur dans une application de messagerie.
On peut spécifier le niveau d’importance des notifications de l'application, afin que toutes les notifications postées sur le même canal de notification aient le même comportement.
Bug avec channel.setSound()
En théorie .setSound() permet de jouer le son que l'on a défini dans le canal, mais en fait uniquement celui que l'on a défini la première fois que l'on a créé le canal, sauf si on supprime le canal et en rajoute un nouveau. Cette information est enregistrée dans les paramètres Android de l'appareil.
Cela permet à l’utilisateur de l'appareil de modifier le son du canal (et tous les autres paramètres) via les paramètres Android. Donc, en principe il n’y a aucun besoin ou avantage pour le développeur à ajouter le canal chaque fois qu'il désire envoyer un push de notification car le fait qu’il s’exécute une fois sur l’installation de l’application est suffisant.
En fait, il y a un bug :
La raison pour cela est que lorsque vous créez un canal avec NotificationManager.IMPORTANCE_DEFAULT l'enregistrement Android sera fait en tant que NotificationManager.IMPORTANCE_HIGH (joue son par défaut).
La solution est d'utiliser NotificationManager.IMPORTANCE_LOW et de créer un nouveau canal. Une fois qu'un canal est créé, on ne peut plus modifier l'importance (bon on peut toujours tenter de le faire, mais l'importance nouvelle est ignoré). Ces informations semblent avoir été stockées de façon permanente par le système et le canal créé ne peut être supprimé que par une désinstallation de l'application ou par programmation : suppression via .deleteNotificationChannel(nChannel.getId()); puis recréation avec .createNotificationChannel(nChannel);. Attention dans ce dernier cas il y a une limite : on ne peut pas créer un canal avec le même id de la suppression et s'attendre à être en mesure d'appliquer des paramètres différents pour le nouveau canal.
La classe NotificationCompat
Cette classe fournit une interface utilisateur permettant de régler les préférences de notification pour l'application qui la contient.
Action builder de la classe de construction pour les objets NotificationCompat, permet un contrôle plus facile de tous les flags, et aide à construire les mises en page typiques des notifications.