2011-10-03 23 views
1

在我的應用程序中,我設置了一個位置管理器來每10分鐘更新當前位置(或者我認爲)。相反,我得到每5分鐘更新:爲什麼我的應用程序位置更新速度比我指定的快兩倍?

10-03 23:45:17.153: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m 
10-03 23:50:23.162: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m 
10-03 23:55:23.074: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m 
10-04 00:00:23.077: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m 

下面的代碼:

LocationManager locationManager = (LocationManager) 
        this.getSystemService(Context.LOCATION_SERVICE); 

LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     Log.d(APP_TAG, "Location updated with accuracy: " + location.getAccuracy() + "m"); 
    } 
    //Other methods are empty and omitted for brevity 
}; 

int TEN_MINUTES = 10 /*Minutes*/ * 60 /*sec per min*/ * 1000 /*ms per sec*/; 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
             TEN_MINUTES, 0, locationListener); 

誰能解釋這是爲什麼不工作,我想?例如。爲什麼每5分鐘更新一次而不是10次?

回答

5

如文檔中注意到LocationManager.requestLocationUpdates():

minTime:接收通知的最小時間間隔,以毫秒爲單位。 此字段僅用作提示以節省電量,位置更新之間的實際時間可能大於或小於此值。

因此,不能保證您不會經常收到更多(或更少)的更新。 GPS芯片有可能提供更準確的位置信息,而不會消耗額外的功率,否則不會達到所要求的粒度級別。另一個應用程序也可能在後臺請求更新。

回答更多的細節,可能需要知道您的手機中的特定GPS接收器的工作原理。

+0

android可以是一個神祕的情人.. – Ian

+0

有趣的是,如果另一個應用程序正在做位置更新,那麼我的偵聽器被解僱?假設這種說法有道理。 –

0

你確定它不是每五分鐘更新一次嗎?

當我在locationListener下做了這樣的事情時,我放了一張支票以確保10分鐘實際上已經過去了。

if(System.CurrentTimeMillis() > updateTime + currentTimeInMillis) 
{ 
update your log here 
currentTimeInMillis = System.CurrentTimeMillis(); 
} 
+0

日誌註釋位於位置更新偵聽器的回調中,因此應該只在更新發生時調用 –

+0

是的,我知道這只是添加額外的檢查以確保時間真正通過。特別是如果其他事情可以激發你的事件。 – samack

0

的行爲是古怪的,至少可以說。該文件說這些參數只是提示。我無法真正回答的一個問題是:

在決定是否發送更新時,時間和距離參數是邏輯「或」還是邏輯「與」?

如果這是一個OR條件,那麼如果操作系統認爲你移動的距離超過了它可能更新的最小距離。

相關問題