Android LocationManager.getlastknownlocation () renvoie null

J'essaie donc d'échantillonner les coordonnées gps juste une fois dans une application. Je ne veux pas créer un objet LocationListener pour recevoir 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 "géo fixe latitude longitude" pour le définir, et aussi j'ai essayé d'utiliser la façon de le définir DDMS. Ni la méthode a eu un effet sur le code. De plus, le fragment ne cause aucune exception.

Merci pour votre aide.

17
demandé sur Robert Parker 2009-10-22 21:07:44

2 réponses

l'appel pour demander la mise à jour d'un emplacement ne bloque pas, il n'attendra donc pas là. Aussi le fournisseur dans l'émulateur peut ne pas avoir démarré.

Un possible contrôle pourrait voir si les paramètres de il désactiver le gps fournisseur ? alors envoie geo fix.

cependant, j'utiliserais L'écouteur de localisation, il serait idéal dans votre cas puisque vous avez besoin d'une géo-correction pour aller plus loin.L'écouteur de localisation est utilisé pour recevoir des notifications de la part du Gestionnaire de localisation lorsque l'emplacement a modifié. Vous pouvez désinscrire l'auditeur après le premier geofix.

Note: cela peut prendre un certain temps sur le périphérique pour obtenir l'emplacement actuel, et même sur le périphérique cela peut retourner null.

11
répondu krishc 2009-10-22 19:57:28

Essayez d'utiliser le MyLocationOverlay , créez un runnable qui fait ce que vous devez faire avec cette localisation 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ésactiver les mises à jour de localisation pour le MyLocationOverlay.

Edit: la raison pour laquelle l'emplacement est null est qu'au moment où le code est lancé, aucun geofix n'a été reçu.

0
répondu I82Much 2009-10-22 18:30:23