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秒继续接收更新.如果另一个应用正在使用具有更高更新率的位置服务,您将获得更多位置更新.
我相信它对您的应用程序消耗的电池寿命有很好的影响,您可以定义等待的最长时间,同时说如果有可用的更新,则需要它.电池消耗将记入应用程序,该应用程序请求更频繁的更新而不是您的更新.
另外:只有当第一次更新的距离超过20米并且第二次更新时,是否有内置功能来检查位置更新?
LocationRequest有一个方法可用于设置更新之间的最小距离.
int minimumDistanceBetweenUpdates = 20;
LocationRequest request = new LocationRequest();
request.setMinimumDisplacement(minimumDistanceBetweenUpdates);
// ... request.setInterval(interval); etc
Run Code Online (Sandbox Code Playgroud)
我在android 中每隔5分钟写一次自己的后台位置更新.我想知道其中的差别之间
setInterval
和setFastestInterval
假设setFastestInterval();
请求a具有更高的优先级Location
.对于您设置的任何应用setFastestInterval();
程序,它将是将首先执行的应用程序(即使其他应用程序正在使用LocationServices
).
例如:如果APP1有setFastestInterval(1000 * 10)
和APP2有setInterval(1000 * 10)
,这两个应用程序具有相同的请求间隔.但是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;
}
}
Run Code Online (Sandbox Code Playgroud)
并在第一个请求中设置lat
和long
当前位置(使用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)
归档时间: |
|
查看次数: |
33441 次 |
最近记录: |