我在android中每隔5分钟编写一次自己的背景位置更新。我想知道其中的差别之间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
float distanceInMeters = distFrom((float)locationObj.getLatitude(), (float)locationObj.getLongitude(), (float)mCurrentLocation.getLatitude(), (float)mCurrentLocation.getLongitude())
使用此功能,这也是用户的建议 SO
public static float distFrom(float lat1, float lng1, float lat2, float lng2) {
double earthRadius = 6371;
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;
}