2009-10-22 12 views
17

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.Android LocationManager.getLastKnownLocation() renvoie la valeur null

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 aussi essayé d'utiliser la méthode DDMS pour le paramétrer. Aucune méthode n'a eu d'effet sur le code. De plus, l'extrait ne provoque aucune exception.

Merci pour votre aide.

+1

Voici un bel exemple avec le code source [http://marakana.com/forums/android/android_examples/42.html](http://marakana.com/forums/android/android_examples/42.html) – Fedor

Répondre

11

L'appel à la demande de mise à jour pour un emplacement ne bloque pas, par conséquent, il n'attendra pas là. De plus, le fournisseur dans l'émulateur n'a peut-être pas été démarré.

Une vérification possible pourrait être de voir si les paramètres en lui désactiver fournisseur GPS? Puis envoyez une correction géographique.

Cependant, j'utiliserais Location Listener, ce serait idéal dans votre cas car vous avez besoin d'un correctif géographique pour aller plus loin.Location Listener est utilisé pour recevoir des notifications du LocationManager lorsque l'emplacement a changé. Vous pouvez annuler l'enregistrement de l'écouteur après le premier geofix.

Remarque: L'emplacement actuel peut prendre un certain temps sur l'appareil, et même sur un appareil, il peut renvoyer une valeur nulle.

+0

Ouais, faire un LocationListener puis attendre d'avoir un correctif dont vous êtes satisfait est à peu près votre seule option. Comme mentionné, vous pouvez immédiatement l'annuler. –

+8

Il s'avère que sans n'importe quel LocationListener il ne fonctionnera pas. Même si vous ajoutez juste un LocationListener qui ne fait rien, le téléphone obtiendra des coordonnées GPS. –

+0

Je suppose que LocationListener met à jour certains emplacements mis en cache, que locationManager utilise. Merci d'avoir posté. – krishc

0

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

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 d'emplacement pour le MyLocationOverlay. Editer: La raison pour laquelle l'emplacement est nul est parce qu'au moment où ce code est exécuté, aucun geofix n'a été reçu.

+0

I obtenir un nul aussi, mais l'application Google Maps sait où je suis instantanément, il doit donc y avoir une solution stockée quelque part. –

+0

L'utilisation d'un runnable est astucieuse mais il n'est pas nécessaire d'utiliser l'API google maps pour ce problème. – Dorje

Questions connexes