2011-08-11 4 views
1

J'ai implémenté du code qui devrait renvoyer l'emplacement actuel.android onLocationChanged n'a jamais appelé

D'abord le code:

public static double[] getLocation(Context context) { 
     double[] result; 
     lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
     MyLocationListener ll = new MyLocationListener(); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 

     while(!hasLocation) { } 

     result = ll.getResult(); 

     return result; 
    } 

    private static class MyLocationListener implements LocationListener { 
     double[] result = new double[2]; 

     public double[] getResult() { 
      return result; 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      if(location.getAccuracy() != 0.0 && location.getAccuracy() < 100) { 
       result[0] = location.getLatitude(); 
       result[1] = location.getLongitude(); 
       hasLocation = true; 
       lm.removeUpdates(this); 
      } 
     } 

     @Override 
     public void onProviderDisabled(String provider) {} 

     @Override 
     public void onProviderEnabled(String provider) {} 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
    } 

Le problème est que tous les Stopps sur déclaration 'tout'. Quand j'ai essayé de déboguer ce point d'arrêt de réglage sur la première ligne OnLocationChanged() rien ne se passe, mais Logcat montrait des journaux comme:

loc_eng_report_position: vertical_accuracy = 64.000000 
DEBUG/libloc(1292): date:2011-08-11, time:10:51:03.372, raw_sec=1313052663, raw_sec2=1313052663,raw_msec=1313052663372 

Toutes les idées?

Répondre

2

while (! HasLocation) {} empêche votre application de faire quoi que ce soit. Vous devez traiter l'emplacement dans le callback onLocationChanged, ou vous devez démarrer le gestionnaire de position beaucoup plus tôt et espérer que vous obtiendrez un résultat au moment où vous en aurez besoin. Vous ne pouvez pas être occupé, attendez la réponse.

+0

Je voulais attendre avec le fil pour obtenir l'emplacement et après cela renvoyer le résultat. Dois-je déplacer requestLocationUpdates() pour séparer le thread? – Seraphis

+0

Ok, je l'ai déplacé pour séparer le fil avec Looper. Maintenant ça marche. Il y a toujours un problème avec la suppression des mises à jour. L'icône GPS disparaît trop lentement. Je ne sais pas pourquoi. En tout cas, merci pour vos suggestions :-) – Seraphis