web-dev-qa-db-fra.com

Android LocationManager.getLastKnownLocation () renvoie null

J'essaie donc d'échantillonner les coordonnées GPS une seule fois dans une application. Je ne veux pas créer un objet LocationListener pour obtenir constamment des mises à jour gps. Je veux attendre de recevoir les coordonnées, puis passer à une autre tâche.

Voici un extrait de code

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);

La variable loc est toujours nulle dans l'émulateur. J'ai essayé d'utiliser la commande "geo fix latitude longitude" pour le définir, et j'ai également essayé d'utiliser la façon DDMS de le définir. Aucune des deux méthodes n'a eu d'effet sur le code. De plus, l'extrait de code ne provoque aucune exception.

Merci de votre aide.

17
Robert Parker

L'appel pour demander la mise à jour d'un emplacement n'est pas bloquant, il n'attendra donc pas là. Le fournisseur dans l'émulateur peut également ne pas avoir été démarré.

Une vérification possible pourrait être de voir si les paramètres qu'il contient désactivent le fournisseur gps? puis envoyez geo fix.

Cependant, j'utiliserais Listener d'Emplacement, ce serait idéal dans votre cas puisque vous avez besoin d'un correctif géographique pour continuer. Le Listener d'Emplacement est utilisé pour recevoir des notifications du LocationManager lorsque l'emplacement a changé. Vous pouvez désinscrire l'auditeur après le premier géofix.

Remarque: Cela peut prendre un certain temps sur l'appareil pour obtenir l'emplacement actuel, et même sur l'appareil, cela peut retourner null.

11
krishc

Essayez d'utiliser le MyLocationOverlay , créez un exécutable qui fait ce que vous devez faire avec cet emplacement GPS et passez-le à

boolean     runOnFirstFix(Java.lang.Runnable runnable)
          Queues a runnable to be executed as soon as we have a location fix.

puis désactivez les mises à jour d'emplacement pour MyLocationOverlay.

Modifier: La raison pour laquelle l'emplacement est nul est qu'au moment de l'exécution du code, aucun géofix n'a été reçu.

0
I82Much