92 votes

Désactiver le son de NotificationChannel

Aujourd'hui, j'ai commencé à cibler API 26, qui m'a forcé à utiliser des Canaux de Notification.

Mon problème est que maintenant, chaque nouvelle notification (y compris les mises à jour) une fâcheuse son est joué.

Comment puis-je désactiver ce son?

J'ai essayé de remplacer ce son avec un son mp3 dans le but de le passer à un mp3 avec le silence, mais cela est ignoré.

Je suis juste l'ajout d'une notification qui est de la priorité la plus faible, essentiellement en donnant à l'utilisateur la possibilité d'effectuer certaines actions, après qu'il a interagi avec l'application. Il n'y a pas de raison d'être bruyant, l'utilisateur sait qu'il peut se référer à l'avis parce qu'il a fait une certaine chose avec l'application de laquelle il sait que sera la cause d'une notification apparaît.

L'utilisateur va vraiment commencer à obtenir ennuyé par ce son.

131voto

mVck Points 1801

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

EDIT: Assurez-vous de renommer le canal (et de supprimer l'ancien) pour qu'il soit appliqué aux utilisateurs existants. (Des canaux peuvent être créés, mais jamais modifiés par l'application, seul l'utilisateur peut le faire.)

100voto

Daniel F. Points 836

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

7voto

acoder Points 21

Comme ce que j'ai vu, depuis API 26 (Oreo) il n'est pas possible de changer le son de notification après il était une fois créé.

    notificationManager.deleteNotificationChannel("channel_id"));
    NotificationChannel notificationChannel = new NotificationChannel(
        "channel_id", "channel_name",
        NotificationManager.IMPORTANCE_HIGH);
    notificationChannel.setSound(null, null);
    notificationManager.createNotificationChannel(notificationChannel);

Même la suppression de la manche avant de création n'est pas de l'aide.

Google documentation dit:

android.app.NotificationManager public void deleteNotificationChannel(String channelId)

Supprime le canal de notification. Si vous créez un nouveau canal avec le même id, l'supprimé d'un canal de l'onu-supprimé avec tous les mêmes réglages qu'il avait avant a été supprimé.

NotificationChannel#setSound() états de documentation

Seulement modifiable avant le canal est soumis à l' NotificationManager#createNotificationChannel(NotificationChannel)

Dommage que notificationBuilder.setSound(defaultSoundUri) ne fonctionne pas ainsi:

Cette méthode est dépréciée de l'API de niveau 26. Utilisation NotificationChannel#setSound(Uri, AudioAttributes) à la place.

Aussi avec le soutien de la bibliothèque ne fonctionne pas. Si le son est uniquement réglable une fois dans l'application et la modification par l'utilisateur n'est possible que dans les paramètres de la notification. Pour moi Ferran Negre du commentaire n'a pas fonctionné. Je ne comprends pas pourquoi Google fait de cette restriction. Trop mauvais.

4voto

Akash Bisariya Points 1418
 NotificationManager.IMPORTANCE_LOW
 

Il ne produit aucun son lorsque la notification est créée car j'ai besoin de la même chose dans mon application musicale.

Et oui, si vous avez déjà créé un canal de notification, vous devez soit modifier l'ID du canal, soit simplement désinstaller l'application précédente et l'installer à nouveau.

3voto

inspire_coding Points 43

Pour moi, la solution consistait à créer une notification de groupe .

 val builder = NotificationCompat.Builder(this)
        .setGroupAlertBehavior(GROUP_ALERT_SUMMARY)
        .setGroup("My Group")
        .setGroupSummary(false)
        .setDefaults(DEFAULT_ALL)
        .setSound(null)
 

Mais dans ce cas, si vous envoyez une nouvelle notification avec un nouvel ID, celle-ci sera regroupée avec les notifications précédentes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X