Je suis bloqué sur ce problème depuis un certain temps. Je travaille sur une application qui utilise la localisation de manière assez intensive dans plusieurs activités différentes. Tous les exemples que j'ai trouvés utilisent un LocationListener distinct dans chaque Activity. Ce n'est pas faisable dans ma situation.
Je me demande quel est le moyen le plus efficace de garder la trace de l'emplacement de l'utilisateur à travers plusieurs activités. Pour l'instant, j'ai créé un service qui implémente LocationListener et utilise une diffusion pour mettre à jour les champs statiques lat et long dans une classe de base Activity. Cela signifie que le service est toujours en cours d'exécution, ce qui n'est pas idéal. Mais si j'arrête le service et ne le relance que lorsque j'en ai besoin, il faut du temps pour obtenir une bonne localisation. J'ai besoin des données de localisation dans la onCreate() de l'activité. C'est la même chose si j'essaie de l'implémenter dans la classe de base de l'activité. Si j'enregistre constamment l'écouteur dans onResume/onCreate et le désenregistre dans onPause(), cela prend trop de temps pour commencer à recevoir des mises à jour. J'ai également essayé de créer un service auquel je pourrais me lier, afin qu'il ne démarre que lorsque j'ai besoin d'un emplacement. Mais j'ai le même problème, il faut trop de temps pour se lier au service et commencer à recevoir des mises à jour.
Le service que j'utilise actuellement fonctionne, mais d'après tout ce que j'ai lu, je ne devrais pas utiliser un service fonctionnant en permanence pour des choses aussi triviales. Mais l'objectif de l'application est de fournir des données pertinentes en fonction de l'emplacement actuel de l'utilisateur. J'ai donc un service qui fonctionne en arrière-plan et fournit des mises à jour périodiques. Le seul problème majeur qui m'a poussé à réexaminer la conception à ce stade est que j'ai récemment découvert que onProviderEnabled() n'est pas appelé si l'utilisateur lance l'application sans que le GPS soit activé et qu'il l'active ensuite. Dans ce cas, l'application n'a aucun moyen de reconnaître que le GPS a été activé pour pouvoir commencer à écouter les mises à jour.
Je pensais avoir compris LocationManager et LocationListener en regardant les exemples, mais je n'arrive pas à les appliquer à cette situation où j'ai besoin de données de localisation dans plusieurs activités. Toute aide ou conseil serait grandement apprécié.