web-dev-qa-db-fra.com

startForeground () n'affiche pas ma notification

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.

50
Dmitry Frank

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.

122
Luka Kama

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

27
Shaw

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.

Bug signalé en novembre 2011

0
Shadowrun

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.

0
Teng-pao Yu

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

0
Marek Skóra

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.

0
Tunji_D