2017-08-28 1 views
11

Aujourd'hui, j'ai commencé à cibler l'API 26 qui m'a forcé à utiliser les canaux de notification.Désactiver le son à partir de NotificationChannel

Mon problème est que maintenant à chaque nouvelle notification (mise à jour) un son ennuyeux est joué.

Comment puis-je désactiver ce son?

J'ai essayé de remplacer ce son avec un son mp3 personnalisé afin de lui passer ensuite un mp3 avec du silence dedans (Jesus Christ, Google!), Mais cela est ignoré.

J'ajoute simplement une notification qui est de très faible priorité, donnant essentiellement à l'utilisateur la possibilité d'effectuer certaines actions après avoir interagi avec l'application. Il n'y a aucune raison d'être bruyant, l'utilisateur saura qu'il peut se référer à la notification parce qu'il a fait une certaine chose avec l'application dont il sait qu'elle fera apparaître une notification.

L'utilisateur commencera vraiment à être agacé par ce son.

Répondre

10

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.

+1

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. –

11

Si vous souhaitez conserver l'importance de votre chaîne et supprimer le son, il semble que notificationChannel.setSound(null, null); fasse l'affaire.

Comme indiqué par Daniel F, assurez-vous de désinstaller et de réinstaller l'application pour que la nouvelle configuration soit appliquée.

+2

Désinstallez/réinstallez, ou renommez simplement le NotificationChannel. –

+0

un canal peut être supprimé via l'API, vous n'avez pas besoin de désinstaller votre application pour cela – SolidSnake

+0

Je pense qu'une meilleure solution est d'utiliser 'NotificationManager.IMPORTANCE_DEFAULT'. Cela désactive le son et est une bonne option pour l'importance. Notez que si vous utilisez 'NotificationManager.IMPORTANCE_HIGH' et que vous affichez la même notification plusieurs fois, il continuera à apparaître. L'utilisation de 'IMPORTANCE_DEFAULT' empêche également cette notification de réapparaître si vous affichez la même notification. – Markymark