2014-09-30 59 views
49

我正在爲Android中每5分鐘的時間間隔編寫自己的背景位置更新。我想知道setInterval和setFastestInterval之間的區別LocationRequest setInterval(long millis)和LocationRequest setFastestInterval(long millis)之間的區別

當我將setInterval設置爲5分鐘並將setFastestInterval設置爲2分鐘時。位置更新每2分鐘一次。

我想知道區別。我不明白什麼是寫在開發者頁面的這https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

此外:是否有一個內置函數來檢查位置更新只有當第一次更新的距離超過20米與第二次更新?

謝謝!

回答

61

通過由Android在看參考:
https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

的setInterval(長)指 - 設置要獲得位置的時間間隔。 setFastestInterval(long)意味着 - 如果某個位置可以更快獲取,則可以獲取它(即,另一個應用正在使用位置服務)。

例如,您啓動您的應用程序並通過setInterval(60 * 1000)進行註冊,這意味着您將每60秒獲取一次更新。
現在你調用setFastestInterval(10 * 1000)。如果您是唯一使用位置服務的應用,則您將每60秒繼續收到更新。如果其他應用正在使用更新速度更快的位置服務,您將獲得更多位置更新。

我相信這對你的應用程序所消耗的電池壽命了良好的影響,你定義的時間,而他說,如果有可用的更新,你想要它,你可以等待的最大金額。電池消耗將記入請求更頻繁更新的應用程序,而不是您的。

+2

感謝指出電池消耗將記入應用程序,更頻繁地請求它。 – 2016-01-13 17:52:57

+1

正如其他評論中指出的那樣,如果符合最小距離標準,您還可以設置獲取位置更新的選項。使用'''mLocationRequest.setSmallestDisplacement(10.0)'''這意味着只有在位移是'''10米''' – kishorer747 2016-11-29 09:51:33

+0

@ kishorer747纔得到位置更新哇,我只是要去手動實現,如果我沒有閱讀你的評論!現在感覺很傻。 – 2017-07-06 13:54:17

7

我正在寫我自己的背景位置更新間隔的每個5分鐘在android中。我想知道setIntervalsetFastestInterval

之間

區別假設 setFastestInterval();有請求 Location更高的優先級。對於你設置的任何應用程序 setFastestInterval();這將是該應用程序將首先執行(即使其他應用程序正在使用 LocationServices)。

例如:如果APP1具有setFastestInterval(1000 * 10)APP2具有setInterval(1000 * 10)既APPS具有相同請求區間。但是它會提出第一個請求,即APP1。 (這是我的理解,答案是不正確的,也許)

當我setInterval5分鐘setFastestInterval2分鐘location update2分鐘

如果使用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; 
    } 
} 

,並在第一次請求您設置的latlong到當前位置(使用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; 
} 
+6

如果您使用sdk中的Location對象,它存在一個函數distanceTo ==> http://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location) – mrroboaat 2015-01-03 14:46:50

6

而且用戶的建議:有一個內置功能檢查位置更新僅在第一次更新的距離超過20米與第二次更新?

LocationRequest有一個方法可以用來設置更新之間的最小距離。

int minimumDistanceBetweenUpdates = 20; 

LocationRequest request = new LocationRequest(); 
request.setMinimumDisplacement(minimumDistanceBetweenUpdates); 
// ... request.setInterval(interval); etc 
+3

使用此mLocationRequest .setSmallestDisplacement(SMALL_DISPLACEMENT_DISTANCE); – 2015-07-30 10:01:29

相關問題