Obtenez de localisation GPS par l'intermédiaire d'un service dans Android
J'ai besoin de l'utilisateur du moniteur endroits à l'aide d'un service d'arrière-plan, puis de les charger et de montrer le chemin d'accès de l'utilisateur.
À l'aide d'une activité, il était assez facile d'obtenir des localisations GPS, mais quand je suis arrivé à le faire par l'intermédiaire d'un service, j'ai un problème car elle semble être la seule à travailler pour l'arpenteuse de threads (ou quelque chose comme ça).
Que j'ai cherché sur internet une solution, j'ai trouvé que beaucoup de gens ont eu le même problème, mais je ne pouvais pas trouver une solution qui fonctionne. Certaines personnes disent que vous devez utiliser préparez->boucle->quitter , et certains disent que vous avez à utiliser un handlerThread, mais tout de même, je ne peux pas savoir comment faire ce genre de choses dans une manière appropriée.
- loopy threads 😀 Tu veux dire de l'arpenteuse de threads. Un Boucleur est un fil spécial avec une file d'attente de demandes mécanisme. Le principal ou le thread de l'INTERFACE utilisateur est un Boucleur. Comme pour le problème de Service, vous êtes en invoquant requestLocationUpdates sur le thread principal? Ou êtes-vous de le faire dans un thread différent? Parce que les activités et les services sont exécutés par le thread principal qui est un boucleur, de sorte que l'invocation requestLocationUpdates doit être le même. Pouvez-vous pour les autres postes, la mention de cette question que vous êtes en train de parler?
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas quel est le problème exactement avec la mise en œuvre de l'emplacement d'écoute de la fonctionnalité du Service. Il ressemble assez à ce que vous faites de l'Activité.
Il suffit de définir un emplacement de l'auditeur et de s'inscrire pour l'emplacement des mises à jour.
Vous pouvez consulter le code suivant comme exemple:
Fichier manifeste:
Le service de fichier:
Toutes ces réponses ne fonctionne pas de la M - pour - Android"O" - 8, en Raison de Bulldozer mode de restreindre le service - quel que soit le service ou toute opération en arrière-plan qui exige des choses discrètes en arrière-plan ne serait plus en mesure d'exécuter.
Donc, l'approche serait d'écouter le système FusedLocationApiClient par BroadCastReciever que toujours à l'écoute de l'emplacement et de travail, même dans Doze mode.
Poster le lien serait inutile, s'il vous plaît recherche FusedLocation avec récepteur de Radiodiffusion.
Grâce
Juste en complément, j'ai mis en place cette manière et généralement travaillé dans ma classe de Service
Dans mon Service
Voici ma solution
Etape 1 Registre Prolongée dans le manifeste
Etape 2 Code De Service
Étape 3
Étape 4
Prendre un coup d'oeil à Google Play Emplacement Des Échantillons
Emplacement des Mises à jour à l'aide d'un premier plan de Service: Obtenir des mises à jour sur la position d'un appareil à l'aide d'un bond et commença de premier plan de services.
Emplacement des Mises à jour à l'aide d'un PendingIntent: Obtenir des mises à jour sur la position d'un appareil à l'aide d'un
PendingIntent
. Montre l'exemple de la mise en œuvre à l'aide d'unIntentService
ainsi que d'unBroadcastReceiver
.ok , je l'ai résolu en créant un gestionnaire sur le onCreate de service , et en appelant les fonctions gps par là .
Le code est aussi simple que cela:
Et puis à force de choses en cours d'exécution sur l'INTERFACE, je l'appelle
post
sur elle.