2011-08-11 30 views
1

私は、現在の場所を返すべきコードを実装しました。android onLocationChangedはまだ呼び出されていません

まずコード:

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) {} 
    } 

問題は 'しばらく' ステートメント上のすべてのstoppsということです。私はonLocationChanged()何も起こりませんの最初の行に、この設定ブレークポイントをデバッグしようとしましたが、Logcatは次のようにいくつかのログを見せていたとき:

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 

任意のアイデア?

答えて

2

while(!hasLocation){}は、アプリケーションの実行をブロックしています。コールバックonLocationChangedの場所を処理する必要があります。そうでない場合は、ロケーションマネージャをもっと早く開始する必要があります。必要なときに結果が得られることを願ってください。あなたは答えを待つことができません。

+0

私は場所を取得するスレッドを待っていた後、結果を返します。私は別のスレッドにrequestLocationUpdates()を移動する必要がありますか? – Seraphis

+0

私はそれをルーパーと別のスレッドに移動しました。今それは働いている。更新プログラムの削除にはまだ問題があります。 GPSアイコンがあまりにも遅く消えています。理由を知らない。とにかく、ありがとうございます:-) – Seraphis

関連する問題