J'essaie de faire fonctionner mon Service
au premier plan. J'ai essayé d'utiliser cet exemple (veuillez rechercher la section " Exécution d'un service au premier plan"), mais startForeground()
n'affiche pas réellement mon notification. Et aucune exception n'est levée. Pour le montrer, j'ai besoin d'utiliser NotificationManager
comme ici expliqué. Avec NotificationManager
ma notification fonctionne, mais je ne suis pas sûr que mon Service
soit au premier plan après cet appel "silencieux" à startForeground()
.
Qu'est-ce qui ne va pas?
[~ # ~] modifier [~ # ~] : Je viens de tester cet exemple de projet qui devrait démontrer startForeground()
, mais ça ne marche pas! J'utilise l'API v7.0, je l'ai testée à la fois sur émulateur et appareil réel (SE Xperia Neo). La notification n'apparaît pas.
EDIT2 : si j'essaie d'appeler setForeground()
, j'ai reçu un avertissement setForeground: ignoring old API call
.
J'ai également essayé d'utiliser startForegroundCompat()
comme décrit ici , mais l'effet est absolument le même. Je vérifie si mon service est au premier plan en utilisant ActivityManager.RunningServiceInfo
Comme décrit ici , et je vois que mon service est pas au premier plan.
Je viens de remarquer que startForeground()
n'affiche pas l'icône de notification si le paramètre id
est défini sur 0
...
startForeground(0, notification); // Doesn't work...
startForeground(1, notification); // Works!!!
J'espère que cela pourrait aider quelqu'un à s'y tenir.
en plus de la meilleure réponse. vous devez également vérifier que vous avez appelé setSmallIcon
. Sur mon Android, je ne peux pas obtenir ce que j'attendais sans appeler setSmallIcon
DMitry. Je viens de souffrir de ton problème et j'ai trouvé la cause.
Si votre application change l'état d'un COMPOSANT PackageManager.setComponentEnabledSetting())
Android supprime le service de foregraound et son icône de notification.
C'est peut-être un vieux fil de discussion, mais j'aimerais ajouter ce que je viens d'apprendre et qui n'est pas encore mentionné:
Il est possible qu'un Service
soit toujours vivant après l'appel de stopSelf()
car il y a Activity
qui sont liés au Service
. En fait, la startForeground()
ne va tout simplement pas afficher la notification ni donner d'exception dans ce cas.
dans mon cas, il n'y a pas eu de notification après l'appel de startForeground(...)
car je n'ai utilisé que .setSubText(...)
pour définir le message (car il est rendu avec une police plus petite sur la plupart des appareils). Mais certains appareils Xiaomi Redmi Note 4 n'afficheront aucune notification si vous ne définissez pas de message en utilisant .setContentText(...)
.
J'espère que cela aidera quelqu'un
Votre service est-il un service démarré ou un service lié? J'ai eu le même problème avec un service lié, mais le démarrage du service avant la liaison m'a permis d'appeler startForeground(int, notification)
avec et de faire apparaître la notification.