LocationRequest setInterval(long millis)和LocationRequest setFastestInterval(long millis)之间的区别

我正在编写我自己的背景位置更新每隔5分钟在Android的时间间隔。 我想知道setInterval和setFastestInterval之间的区别

当我将InterInval设置为5分钟并将setFastestInterval设置为2分钟。 位置更新每2分钟一次。

我想知道区别。 我无法理解这个https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html的开发者页面中究竟写了什么

另外:是否有一个内置的function来检查位置更新只有当第一次更新的距离超过20米与第二次更新?

谢谢!

通过查看Android的参考:
https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

setInterval(long)意思是 – 设置你想获取位置的时间间隔。 setFastestInterval(long)的意思是 – 如果一个位置可用的更快,你可以得到它(即另一个应用程序正在使用的位置服务)。

例如,你启动你的应用程序并通过setInterval(60 * 1000)进行注册,这意味着你将每60秒获得一次更新。
现在你调用setFastestInterval(10 * 1000)。 如果您是使用位置服务的唯一应用,则您将每60秒继续收到一次更新。 如果另一个应用程序使用更新速度更快的位置服务,则会获得更多位置更新。

我相信这会对您的应用程序消耗的电池使用时间产生很好的影响,您可以定义可以等待的最长时间,同时说明如果有更新可用,则需要它。 电池消耗将记入请求更频繁更新的应用程序,而不是您的。

我正在编写我自己的背景位置更新每隔5分钟在Android的时间间隔。 我想知道setIntervalsetFastestInterval之间的区别

假定setFastestInterval(); 具有更高的请求Location优先权。 无论你设置setFastestInterval(); 这将是那个将被执行的应用程序(即使其他应用程序正在使用LocationServices )。

例如:如果APP1具有setFastestInterval(1000 * 10)APP2具有setInterval(1000 * 10) ,则两个APPS的请求间隔相同。 但是,这是APP1将提出第一个要求。 (这是我所理解的,答案也许不正确)

当我将setFastestInterval设置为5分钟setFastestInterval2分钟location update2分钟一次

如果您将setFastestInterval()setInterval() setFastestInterval()一起使用,则应用程序将尝试请求setFastestInterval()给出的时间,这就是为什么您的应用程序每2 分钟发出一次请求。

另外:是否有一个内置的function来检查位置更新只有当第一次更新的距离超过20米与第二次更新?

为了每20米发出请求,您可以创build一个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进行比较

 float distanceInMeters = distFrom((float)locationObj.getLatitude(), (float)locationObj.getLongitude(), (float)mCurrentLocation.getLatitude(), (float)mCurrentLocation.getLongitude()); 

使用这个function也是SO用户的一个build议

 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; } 

另外:是否有一个内置的function来检查位置更新只有当第一次更新的距离超过20米与第二次更新?

LocationRequest有一个方法可以用来设置更新之间的最小距离。

 int minimumDistanceBetweenUpdates = 20; LocationRequest request = new LocationRequest(); request.setMinimumDisplacement(minimumDistanceBetweenUpdates); // ... request.setInterval(interval); etc