(Mise à jour 2019-05: Il y a pire avec Android Q, là, je suis même d'obtenir un son lors de l'utilisation d' NotificationManager.IMPORTANCE_LOW
, au moins dans l'Émulateur...)
La solution est d'utiliser NotificationManager.IMPORTANCE_LOW
et de créer un nouveau canal pour elle. Une fois qu'un canal est créé, vous ne pouvez pas modifier l'importance (eh bien, vous pouvez, mais l'importance nouvelle est ignoré). L'information de la station semble avoir stocké de façon permanente par le système et le canal créé n'est supprimé lors de la désinstallation de l'application. [Mise à jour: Selon Ferran Negre's commentaire, vous pouvez supprimer le canal via nm.deleteNotificationChannel(nChannel.getId());
et de le recréer avec nm.createNotificationChannel(nChannel);
mais apparemment il y a une limite que vous ne pouvez pas créer un canal avec le même id de la suppression du canal et s'attendre à être en mesure d'appliquer des paramètres différents pour le récupéré canal, voir acoder's réponse]
Tandis que les précédentes versions d'Android n'a joué aucun son par défaut, ceci a changé avec Android O, mais seulement lorsque vous ciblez l'API 26, qui est, l'utilisation de signalement. C'est une incohérence, eh bien, en fait, c'est un bug:
La raison pour cela est que lorsque vous créez un canal avec NotificationManager.IMPORTANCE_DEFAULT
(pas soundworthy par défaut) Android sera fait "un peu" enregistrer en tant qu' NotificationManager.IMPORTANCE_HIGH
(joue son par défaut).
Vous pouvez le vérifier en allant dans les options de notifications (appui long sur l'entrée de notification), où vous aurez à lire qu'il est de type NotificationManager.IMPORTANCE_HIGH
puis désactiver la notification, puis de le ré-activer. Dans ce processus, il obtient "déclassé" de la NotificationManager.IMPORTANCE_HIGH
pour les non-sondage, en fait enregistrée NotificationManager.IMPORTANCE_DEFAULT
.
Le bug a été soumis à l'Android outil de suivi, de sorte que vous pouvez étoile (signalé par Google comme "ne sera pas Corrigé (Infaisable)", parce que... gâtés).
BTW, la nouvelle docs à https://developer.android.com/training/notify-user/channels
prétendre que le comportement par défaut utilisé pour l'être que par défaut joué un son avant Android 8.0, qui est certainement pas vrai. C'est leur liste
User-visible importance level Importance Priority
(Android 8.0 and higher) (Android 7.1 and lower)
Urgent Makes a sound and appears as IMPORTANCE_HIGH PRIORITY_HIGH
a heads-up notification or PRIORITY_MAX
High Makes a sound IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medium No sound IMPORTANCE_LOW PRIORITY_LOW
Low No sound and does not appear IMPORTANCE_MIN PRIORITY_MIN
in the status bar
Vous pouvez même voir la discordance entre l'importance de la visibilité de haut et de notification de l'importance de haute... je ne sais pas pourquoi ils font cela. Ils ont certainement d'un bug dans leur code.
Tout en dessous de la ligne suivante est obsolète, mais qui bug mentionné, il est toujours valide. Mon erreur était de penser qu' NotificationManager.IMPORTANCE_MIN
est le côté inférieur de NotificationManager.IMPORTANCE_DEFAULT
, mais NotificationManager.IMPORTANCE_LOW
est.
Lorsque vous puis allez dans les paramètres de notification de l'application via long-appuyez sur la notification et de tous les canaux de bouton à bascule et l'interrupteur pour que le canal et s'éteint à nouveau, puis il définit lui-même à l' NotificationManager.IMPORTANCE_DEFAULT
et aucun son ne jouées. J'ai aussi remarqué qu'après un crash, il ne se réinitialiser NotificationManager.IMPORTANCE_HIGH
Donc, fondamentalement, la solution de contournement consiste à utiliser NotificationManager.IMPORTANCE_MIN
. Mais vous devez créer un nouveau canal de sorte que ce NotificationManager.IMPORTANCE_MIN
est en vigueur, car il semble que vous ne pouvez pas modifier l'importance de l'existence d'un canal une fois que vous avez créé.
Mise à jour: s'avère la solution de contournement NotificationManager.IMPORTANCE_MIN
a un inconvénient.
Lorsque vous utilisez le niveau d'importance alors votre notification ne s'affiche plus complètement à l'intérieur de la barre de notification, mais s'insère dans un nouveau Canal de Notification Groupe qui est repliée par défaut (et qui va s'effondrer de lui-même chaque fois que le tiroir est tiré vers le bas). Quelle poisse!
Mise à jour 2: Creuser un peu plus profondément, il s'avère que c'est comme s'il a correctement enregistré comme NotificationManager.IMPORTANCE_DEFAULT
, mais de toute façon la magie ai mis à niveau vers NotificationManager.IMPORTANCE_HIGH
, comme il l'aurait fait quand explicitement à l'utilisateur change le réglage de défaut à haute. Que l'on obtient également réinitialiser les paramètres par défaut après la mise à la notification d'éteindre puis de le rallumer.