La solution est d'utiliser NotificationManager.IMPORTANCE_LOW
et de créer un nouveau canal pour cela. Une fois qu'un canal est créé, vous ne pouvez pas changer l'importance (bien, vous pouvez, mais la nouvelle importance est ignorée). Les informations sur les chaînes semblent être stockées en permanence par le système et les chaînes créées ne sont supprimées que lorsque vous désinstallez l'application. Alors que les précédentes versions d'Android ne restituaient aucun son par défaut, cela a changé avec Android O, mais uniquement lorsque vous ciblez l'API 26, c'est-à-dire, utilisez les canaux de notification. Ceci est une incohérence.
Tout en dessous de la ligne suivante est obsolète, mais ce bogue mentionné, il est toujours valide. Mon erreur là était de penser que NotificationManager.IMPORTANCE_MIN
est le prochain inférieur de NotificationManager.IMPORTANCE_DEFAULT
, mais NotificationManager.IMPORTANCE_LOW
est.
Lorsque vous créez un canal avec NotificationManager.IMPORTANCE_DEFAULT
(non soundworthy par défaut) il enregistre effectivement commeNotificationManager.IMPORTANCE_HIGH
(joue son par défaut). C'est un bug. Lorsque vous accédez aux paramètres de notification de l'application via le bouton de notification longue durée et le bouton toutes les chaînes et que vous activez et désactivez le commutateur pour cette chaîne, il se positionne automatiquement sur NotificationManager.IMPORTANCE_DEFAULT
et aucun son ne s'affiche. joué. J'ai également remarqué qu'après un accident, il a été réinitialisé à NotificationManager.IMPORTANCE_HIGH
Donc, la solution de contournement consiste à utiliser NotificationManager.IMPORTANCE_MIN
. Mais vous devez créer un nouveau canal pour que ce NotificationManager.IMPORTANCE_MIN
soit actif, car il semble que vous ne pouvez pas changer l'importance d'un canal déjà existant une fois que vous l'avez créé.
The bug has been submitted to the Android issue tracker, so you may want to star it.
Mise à jour: Il s'avère que la solution de contournement avec NotificationManager.IMPORTANCE_MIN
présente un inconvénient. Lorsque vous utilisez ce niveau d'importance, votre notification ne s'affiche plus entièrement dans le tiroir des notifications, mais s'insère dans un nouveau groupe de canaux de notification qui est réduit par défaut (et se replie chaque fois que le tiroir est abaissé) . Quelle bête!
Mise à jour 2: Creuser un peu plus profond, il se avère qu'il est comme si elle correctement enregistré comme NotificationManager.IMPORTANCE_DEFAULT
, mais en quelque sorte magiquement eu un surclassement dans NotificationManager.IMPORTANCE_HIGH
, comme il le ferait lorsque l'utilisateur modifie explicitement le paramètre de défaut haute. Celui-ci est également réinitialisé à la valeur par défaut après avoir désactivé la notification, puis à nouveau.
Une partie vraiment importante de cette réponse: "Une fois qu'un canal est créé, vous ne pouvez pas changer l'importance (bien, vous pouvez, mais la nouvelle importance est ignorée)." J'ai lutté pendant longtemps, parce que je n'ai pas compris pourquoi aucun des changements que j'ai faits à mon NotificationChannel n'était reflété dans le comportement de l'application. Je devais renommer la chaîne à chaque fois que je la modifiais pour voir le changement. –