我正在寫我自己的背景位置更新間隔的每個5分鐘在android中。我想知道setInterval
和setFastestInterval
之間
區別假設
setFastestInterval();
有請求
Location
更高的優先級。對於你設置的任何應用程序
setFastestInterval();
這將是該應用程序將首先執行(即使其他應用程序正在使用
LocationServices
)。
例如:如果APP1具有setFastestInterval(1000 * 10)
和APP2具有setInterval(1000 * 10)
,既APPS具有相同請求區間。但是它會提出第一個請求,即APP1。 (這是我的理解,答案是不正確的,也許)
當我setInterval
至5分鐘和setFastestInterval
到2分鐘。 location update
每2分鐘。
如果使用setFastestInterval()
與setInterval()
應用將努力使在setFastestInterval()
給定的時間的請求一起,這就是爲什麼你的應用程序,使得每一個2分鐘的請求。
此外:是否有一個內置函數來檢查位置更新只有當第一次更新的距離超過20米與第二次更新?
製作要求每隔20米,您可以創建一個LocationModel
public class LocationModel {
private double latitude;
private double longitude;
public LocationModel(){
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
,並在第一次請求您設置的lat
和long
到當前位置(使用getLastLocation();
)
然後onLocationChanged()
你來自對象的數據並與new Current Location
使用
這個功能,也是SO
public static float distFrom(float lat1, float lng1, float lat2, float lng2) {
double earthRadius = 6371; //kilometers
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
float dist = (float) (earthRadius * c);
return dist;
}
感謝指出電池消耗將記入應用程序,更頻繁地請求它。 – 2016-01-13 17:52:57
正如其他評論中指出的那樣,如果符合最小距離標準,您還可以設置獲取位置更新的選項。使用'''mLocationRequest.setSmallestDisplacement(10.0)'''這意味着只有在位移是'''10米''' – kishorer747 2016-11-29 09:51:33
@ kishorer747纔得到位置更新哇,我只是要去手動實現,如果我沒有閱讀你的評論!現在感覺很傻。 – 2017-07-06 13:54:17