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

The*_*Man 70 gps android location locationmanager

我在android中每隔5分钟编写一次自己的后台位置更新.我想知道setInterval和setFastestInterval之间的区别

当我将setInterval设置为5分钟并将setFastestInterval设置为2分钟.每2分钟调用一次位置更新.

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

另外:只有当第一次更新的距离超过20米并且第二次更新时,是否有内置功能来检查位置更新?

谢谢!

Oha*_*dok 100

通过以下方式查看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秒继续接收更新.如果另一个应用正在使用具有更高更新率的位置服务,您将获得更多位置更新.

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

  • 感谢您指出电池消耗将记入更频繁请求它的应用程序. (4认同)
  • 如其他评论中所指出的,如果满足最小距离标准,您还可以设置选项以获取位置更新.使用```mLocationRequest.setSmallestDisplacement(10.0)```这意味着只有当位移是```10米``时才获得位置更新 (2认同)

use*_*910 9

另外:只有当第一次更新的距离超过20米并且第二次更新时,是否有内置功能来检查位置更新?

LocationRequest有一个方法可用于设置更新之间的最小距离.

int minimumDistanceBetweenUpdates = 20;

LocationRequest request = new LocationRequest();
request.setMinimumDisplacement(minimumDistanceBetweenUpdates);
// ... request.setInterval(interval); etc
Run Code Online (Sandbox Code Playgroud)

  • 使用此mLocationRequest.setSmallestDisplacement(SMALL_DISPLACEMENT_DISTANCE); (5认同)

hrs*_*krs 6

我在android 中每隔5分钟写一次自己的后台位置更新.我想知道其中的差别之间setIntervalsetFastestInterval

假设setFastestInterval();请求a具有更高的优先级Location.对于您设置的任何应用setFastestInterval();程序,它将是将首先执行的应用程序(即使其他应用程序正在使用LocationServices).

例如:如果APP1setFastestInterval(1000 * 10)APP2setInterval(1000 * 10),这两个应用程序具有相同的请求间隔.但是APP1会提出第一个要求.(这是我所理解的,答案可能不正确)

当我setInterval5分钟,并setFastestInterval2分钟.在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在第一个请求中设置latlong当前位置(使用getLastLocation();)

然后onLocationChanged()你从对象中获取数据并与之进行比较new Current Location

float distanceInMeters = distFrom((float)locationObj.getLatitude(), (float)locationObj.getLongitude(), (float)mCurrentLocation.getLatitude(), (float)mCurrentLocation.getLongitude());
Run Code Online (Sandbox Code Playgroud)

使用这个功能也是用户的建议 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用sdk中的Location对象,则它存在一个函数distanceTo ==> http://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location) (7认同)