Я пишу свои собственные фоновые обновления местоположения каждые 5 минут в android. Я хотел бы узнать разницу между 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; //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;
}
person
hrskrs
schedule
04.11.2014