2011-12-22 14 views
2

私はLocationManagerを使用してGPSの検索を高速に設定しようとしています(500メートル以内) 。言い換えれば、私はちょうど正しい粗い基準設定と正確なロジックを見つけようとしています.10秒後にハンドラスレッド内のより良い場所が見つからないと、チェックを止めます。Android:短時間でネットワークGPSの位置を取得する(最大10秒)

私は私のメインループは次のようになります考えている:私は私の最初の最高の場所として最後の既知の位置を取得し、私のスレッドをキックオフした後

/** 
* Iteration step time. 
*/ 
private static final int ITERATION_TIMEOUT_STEP = 500; //half-sec intervals 
public void run(){ 
    boolean stop = false; 
    counts++; 
    if(DEBUG){ 
     Log.d(TAG, "counts=" + counts); 
    } 

    //if timeout (10 secs) exceeded, stop tying 
    if(counts > 20){ 
     stop = true; 
    } 

    //location from my listener 
    if(bestLocation != null){ 
     //remove all network and handler callbacks 
    } else { 
     if(!stop){ 
      handler.postDelayed(this, ITERATION_TIMEOUT_STEP); 
     } else { 
      //remove callbacks 
     } 
    } 
} 

私が知りたいのは何が行う方法であり、私は粗い基準を設定して、最初のものよりも正確なものを受け取るようにしました。(新鮮さを比較するために)通常は現在の位置とはまったく異なっていますか?

答えて

2

あなたが探しているのは、デバイスに粗い場所を取得するための最良の基準を尋ねることです。

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_COARSE); // Faster, no GPS fix. 
String provider = locationManager.getBestProvider(criteria, true); // only retrieve enabled providers. 

あなたは私のアドバイスはすることができますように精度に基づいてのみをソートすることである。この時点で、このような

void onLocationChanged(Location location) { 
    accuracy = location.getAccuracy(); //accuracy of the fix in meters 
    timestamp = location.getTime(); //basically what you get from System.currentTimeMillis() 
} 

として更新を受信それからちょうどリスナーにリスナー

locationManager.requestLocationUpdates(provider, ITERATION_TIMEOUT_STEP, MIN_LOCATION_UPDATE_DISTANCE, listener); //listener just implements android.location.LocationListener 

を登録あなたの位置は10秒後には変わりますが、大まかな位置の更新は精度が大きく異なります。

こちらがお役に立てば幸いです。

関連する問題