2012-10-11 268 views
3

設備移動時的位置跟蹤

我正在開發一個應用程序,它特別在移動時跟蹤設備的位置。對於同一API調用,我在三星和HTC設備上獲得不同操作系統版本的不同響應。

這是我的代碼。

private static final long HUNDERE_METERS = 100; // in Meters
private static final long TWO_MIN = 60000*2; // in Milliseconds

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setBearingRequired(true); 
criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH); 
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); 
String provider = mlocManager.getBestProvider(criteria, false); 
mlocManager.requestLocationUpdates(provider, TWO_MIN, HUNDERE_METERS, mlocListener); 

'三星GALAXY Nexus-4.1.1' 給出了每一個距離的位置更新由HUNDRED_METERS移動(100米),這是罰款。但在'HTC EVO 3D PG86100-4.0.3'中,GPS變爲2分鐘不可用,然後變爲可用,每2分鐘後會導致位置更新。

我修改了代碼如下

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TWO_MIN, HUNDERE_METERS, mlocListener); 

現在HTC開始工作的罰款,並給予100米,但在三星GPS移動爲每個距離的位置成爲每2分鐘不可用。

請建議使用什麼參數調用requestLocationUpdates來獲取距離移動距離的位置更新,距離應該適用於所有Android設備和操作系統。

回答

0

在Android 4.1 Jelly Bean之前,根據Android位置API規範,minTime和minDistance參數僅僅是應用程序想要保存能量的「提示」。

原始設備製造商可以實際實現這一點,但他們想要的,這導致了各種Android設備上的一些不一致的行爲。因此,在Android 4.1之前,當使用相同的minTime和minDistance參數時,您會在不同設備上看到各種行爲。

包含在這種不一致的行爲中是一個影響許多不同設備的問題,其中minTime參數被完全忽略。看到這個對話與Android團隊的細節:

https://android-review.googlesource.com/#/c/34230/

開始在安卓4.1,定位API規範已收緊和附加CtsVerifier測試已被添加爲強制Android設備更一致的行爲。

上Android 4.1以上的預期行爲是:

「的更新間隔可以使用minTime參數來控制位置更新之間的經過的時間決不會小於minTime,雖然它可以是更多,這取決於。位置提供者執行和其他應用程序所要求的更新間隔。

...

的minDistance纔會參數也可以用來控制位置更新的頻率。如果大於0,則該位置提供者將只發送你的應用程序更新w當該位置已經改變了至少minDistance米,並且至少minTime毫秒已經過去。然而,定位提供商使用minDistance參數節省功耗更爲困難,所以minTime應該是節省電池壽命的主要工具。

...

此前傑利貝恩的minTime參數只是一個提示,以及一些位置提供者實現忽略了它。從傑利貝恩及以後它是強制性的Android兼容設備,觀察兩者的minTime和minDistance纔會參數「

來自: http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String,long,float,android.location.LocationListener