2014-01-23 41 views
1

我使用LocationClient來獲得當前位置的每一分鐘:定期使用LocationClient獲取位置的最佳方式是什麼?

mLocationRequest = LocationRequest.create(); 
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
mLocationRequest.setInterval(60000); 
mLocationRequest.setFastestInterval(60000); 
mLocationClient = new LocationClient(this, this, this); 
// ... when connected: 
mLocationClient.requestLocationUpdates(mLocationRequest, this); 

但是我發現我的LocationListener的的onLocationChanged-方法被調用或者每60或120(或60任何其他倍數)秒(+/- 3秒)。該文檔說:

此間隔是不精確的。您可能根本沒有收到更新(如果沒有可用的位置信息源),或者您可能收到的信息比請求的要慢。 [...]

所以我知道,間隔不是確切的一分鐘。但我認爲我會在60秒結束後儘快獲得當前位置,例如75秒後。但似乎如果LocationClient無法確定位置,它會在接下來的60秒後重試。

這個假設是否正確?

如果是,解決方法是將時間間隔設置爲30秒左右,並在onLocationChanged-method中過濾掉所需的位置。但是這可能會消耗更多的電池電量。

回答

2

當您撥打mLocationRequest.setFastestInterval(60000);時,您說您每60秒鐘不能處理一個以上的呼叫,因此爲什麼它在發送更新前等待60秒的時間間隔(即使它在下一個60秒前45秒期間) - 降低setFastestInterval以確保位置更新在收到後立即發送給您。由於實際輪詢頻率與setInterval(而不是最快間隔)相關,因此增加setFastestInterval不應增加電池使用量。

+0

但降低setFastInterval可以導致我的onLocationChanged方法被調用的頻率超過每60秒,這不是我想要的。 ;-)我想要的東西是:每60秒只調用一次onLocationChanged方法,但如果在60秒後沒有位置,則在獲得下一個座標時儘快調用我的方法。 – Biggie

+1

今天我做了測試:降低FastInterval導致更穩定的60秒位置更新間隔。但是,如果在後臺運行例如「My tracks」-app,並且間隔非常短,則會導致我的應用程序的LocationListener以其FastInterval率(如預期的)進行調用。所以我必須再次過濾所需的位置以獲得我的60秒間隔。所以解決方法似乎仍然是將Interval/FastInterval設置爲低於想要的時間間隔(這是我的建議)。 – Biggie

相關問題