4
votes

Service de premier plan avec une notification silencieuse

< gagnantContexte:

J'utilise l'exemple de projet LocationUpdatesForegroundService de Google pour en savoir un peu plus sur les services.

J'ai téléchargé le projet via le bureau Github et l'ai exécuté sur mon téléphone, tout va bien et le projet fait ce qu'il est prévu de faire.

Mon téléphone est Android 8.0.0, API 26

< gagnantProblème :

La notification de service de premier plan apparaît sur la barre d'état une fois l'application terminée, dès que cela se produit, j'entends un son de notification (son par défaut). Cependant, je souhaite que la notification soit silencieuse, comme dans certaines applications basées sur la localisation (par exemple: Life360 )

Ce que j'ai essayé jusqu'à présent:

Aucune de ces solutions n'a fonctionné pour moi, j'apprécierais vraiment que quelqu'un puisse faire la lumière sur cette situation.


13 commentaires

Appelez-vous la notification dans startForground (id, notification); fonction?


@hfarhanahmed Oui dans LocationUpdatesService.java à la ligne 226


stackoverflow .com / questions / 39809702 /… vérifier cette solution


le code que j'utilise n'a même pas builder.setDefaults (Notification.DEFAULT_ALL);


ajouter .setDefaults (Notification.DEFAULT_ALL); après la ligne 298 dans LocationUpdatesService.java


@hfarhanahmed Non, émet toujours un son de notification.


La solution consiste à utiliser NotificationManager.IMPORTANCE_LOW et à créer un nouveau canal pour celui-ci. Une fois qu'un canal est créé, vous ne pouvez pas changer l'importance (enfin, vous pouvez, mais la nouvelle importance est ignorée). Les informations sur la chaîne semblent être stockées de manière permanente par le système et toute chaîne créée n'est supprimée que lorsque vous désinstallez l'application. vous pouvez supprimer le canal via nm.deleteNotificationChannel (nChannel.getId ()); et recréez-le avec nm.createNotificationChannel (nChannel); via stackoverflow.com/questions/45919392/…


@hfarhanahmed J'ai déjà essayé cela comme je l'ai dit dans ma question.


avez-vous également changé le nom de la chaîne ??


@hfarhanahmed Je n'ai créé aucune nouvelle chaîne Je viens de définir l'importance sur IMPORTANCE_LOW lors de la création de la chaîne INITIALE


essayez de créer une chaîne différente, je pense que vous faites tout correctement.


@hfarhanahmed Cela a résolu mon problème, veuillez le poster comme réponse afin que je puisse l'accepter!


Double possible de Désactiver le son de NotificationChannel


3 Réponses :


1
votes

mChannel.setSound (null, null) le fera, mais vous devez désinstaller / réinstaller l'application pour qu'elle prenne effet. Ou changer CHANNEL_ID en une valeur différente recréera également la chaîne avec le paramètre mis à jour.


1 commentaires

vous allez probablement modifier CHANNEL_ID en production



2
votes

La solution consiste à utiliser NotificationManager.IMPORTANCE_LOW et à créer un nouveau canal pour celui-ci. Une fois qu'un canal est créé, vous ne pouvez pas changer l'importance (enfin, vous pouvez, mais la nouvelle importance est ignorée). Les informations sur la chaîne semblent être stockées de manière permanente par le système et toute chaîne créée n'est supprimée que lorsque vous désinstallez l'application. vous pouvez supprimer le canal en tant que

nm.createNotificationChannel(nChannel);

et le recréer avec

nm.deleteNotificationChannel(nChannel.getId());

via le débordement de pile, répondez ici Désactiver le son de NotificationChannel


2 commentaires

Ne vous contentez pas de copier / coller les réponses d'une autre question. Marquez plutôt cette question comme un double.


@ tir38 D'accord, désolé, je suis nouveau dans le domaine des réponses. le fera la prochaine fois.



1
votes

Dans le LocationUpdatesForegroundService, lorsque le service est onUnbind, il invoquera 'startForeground (NOTIFICATION_ID, getNotification ())', puis la notification s'affichera avec un son. Vous devez donc modifier le NotificationChannel en suivant le code ci-dessous

mChannel.setSound(null, null);
mChannel.setImportance(NotificationManager.IMPORTANCE_LOW);


0 commentaires