2017-06-28 6 views
2

J'ai un service de premier plan qui doit obtenir une mise à jour d'emplacement unique.Le service de premier plan ne reçoit pas les mises à jour d'emplacement en mode Doze sous Android O

Il est lancé par une diffusion spécifique, et au démarrage, il fait simplement une demande sur notre backend. Quand il reçoit une autre diffusion, il demande une mise à jour de l'emplacement (une fois), fait une autre requête backend et s'arrête ensuite. Edit: pour clarifier, le service effectue lui-même les mises à jour de localisation et les requêtes backend. Il est indépendant de l'application principale à cet égard.

Cela fonctionne bien sur Lollipop et Marshmallow, à la fois lorsque le téléphone est éveillé ou en mode Doze. Mais pour une raison quelconque, sur Android O le service ne reçoit jamais de mises à jour de localisation en mode Doze. Le réseautage fonctionne bien à mesure que sa première demande se réalise dans les deux situations. De plus, si je réveille le téléphone pendant que l'emplacement le demande, il recevra la mise à jour. Pareil si je le mets dans la fenêtre de maintenance.

Android O introduit certaines limitations sur background location mais comme la page le mentionne, le comportement de l'application de premier plan (application visible ou service de premier plan en cours d'exécution) doit être préservé et être similaire aux versions précédentes d'Android.

Est-ce un problème dans l'aperçu du développeur ou une restriction que j'ai raté?

+0

Juste pour clarifier, sont à la fois la demande demande du réseau et la mise à jour de localisation étant fait du service? – Noel

+0

@Noel yep. Il est indépendant de l'application – Jukurrpa

Répondre

0

Jetez un oeil sur LocationUpdatesForegroundService Exemple: Code Samples for Android O, peut-être que vous faites quelque chose de mal.

LocationUpdatesForegroundService Sample - Montre comment utiliser un service de premier plan pour obtenir des mises à jour de l'emplacement où les activités d'application sont pas visibles. Pour les applications fonctionnant sur Android O (même les applications qui ciblent Android 7.0 (niveau d'API 24) ou inférieur), les mises à jour en arrière-plan sont limitées à à quelques heures par heure seulement. L'utilisation d'un service de premier plan permet de recevoir des mises à jour plus fréquentes.

Recevez votre article sur GitHub: Java

+0

J'utilisais un PendingIntent (vestige de quand mon service était en arrière-plan), je l'ai remplacé par un LocationCallback avec le Looper du service comme ils le font mais cela n'a pas résolu le problème . – Jukurrpa

+0

J'ai testé l'exemple de code et cela ** ne fonctionne pas (aucune mise à jour de position lorsque l'appareil est en mode veille) **. N'importe qui peut forcer à somnoler en utilisant adb et le tester. Les commandes ADB sont 'déchargeur de batterie de serveurs shell adb unplug' et 'décharges de shell adb deviceidle force-idle' – VishalKale

+0

Les applications qui ont exécuté des services de premier plan (avec la notification associée) ne sont pas limitées par le programme. – phnmnn