2011-12-22 57 views
2

我試圖通過LocationManager獲取網絡位置(500米範圍內)每半秒鐘10秒的快速和髒的GPS查找。換句話說,我只是試圖找到正確的粗糙的Criteria設置和正確的邏輯來在我的Handler線程中沒有更好的位置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. 

然後,只需在註冊監聽器監聽器

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

您收到更新這樣

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

在這一點上我的建議是基於準確,你可以以單獨排序在10秒內不會改變你的位置,但粗略位置更新的準確性差別很大。

我希望這會有所幫助。

相關問題