2014-03-02 69 views
0

我試圖每10分鐘獲取位置更新,但位置更新時間不一致。有時我會在10分鐘後獲得位置更新,有時我會在2小時後更新位置。該應用程序獲取後臺線程的位置更新。Android - LocationManager requestLocationUpdates - 位置更新不一致

下面是代碼:

_locationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 
       10 * 60 * 1000, 
       0, 
       _locationListener, 
       _gpsHandlerThread.getLooper()); 

我也試着設置兩個值,minTime(10)和minDistance纔會(10米),但後來我甚至1-2分鐘後獲得更新。我不確定minTime和minDistance是否具有或邏輯,意思是說如果時間間隔是10分鐘或者用戶移動了10米或具有邏輯。

我的要求是 - 如果用戶從最後一個位置移動了10米,則每10分鐘獲取用戶位置。

我該如何做到這一點?我請求幫忙,解釋它是如何工作的。

+0

如果你正在使用' LocationManager.GPS_PROVIDER'它可能需要長達二十分鐘才能從第一個修復程序衛星 - 更不用說你需要清楚地看到天空,即使你在室內也不行。另一方面,LocationManager.NETWORK_PROVIDER'可以在您的設備連接到無線網絡後立即爲您提供位置更新 - 缺點是此方法不如您使用的GPS方法準確。 – ChuongPham

回答

0

執行此操作的最佳方式不是通過requestLocationUpdates,而是通過使用定時器定期啓動更新。這應該可以免除你不必要的電池損耗。所以我最終做了這樣的事情:

  1. 我有一些檢查,看看我是否喜歡GPS值。
  2. 如果我對GPS很滿意,那麼我會刪除更新,然後啓動計時器再次開始獲取更新。
  3. 我在恢復應用程序時總是得到更新。

代碼重新啓動GPS更新可能是這樣的:

Timer mTimer; 
private void sendFinalGps() { 
    mLocationManager.removeUpdates(this); 
    mTimer = new Timer(); 
    mTimer.schedule(new findGpsTime(), getTimeBetweenUpdates()); 
} 
1

用戶這個處理程序來獲取位置

private Handler customHandler = new Handler(); 
private Runnable updateTimerThread = new Runnable() { 

@Override 
public void run() 
    { 
     try 
      { 

       Location myLocation = mGoogleMap.getMyLocation(); 
       secndLocationListener.onLocationChanged(myLocation); 
      } 
     catch (Exception e) 
      { 
       Log.getStackTraceString(e); 
      } 

    } 
    }; 

調用此

customHandler.postDelayed(updateTimerThread , 10 * 60 * 1000); 
相關問題