Разница между LocationRequest setInterval (long millis) и LocationRequest setFastestInterval (long millis)
Я пишу свои собственные обновления фона для интервалов каждые 5 минут в android. Я хотел бы знать разницу между setInterval и setFastestInterval
Когда я устанавливаюInterval на 5 минут и setFastestInterval на 2 минуты. Обновление местоположения вызывается каждые 2 минуты.
Я хотел бы знать разницу. Я не мог понять, что именно написано на странице разработчика для https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html
Также: существует ли встроенная функция для проверки обновлений местоположения только в том случае, если расстояния до первого обновления превышают 20 метров при втором обновлении?
Спасибо!
Ответы
Ответ 1
посмотрев ссылку 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 секунд. Если другое приложение использует службы определения местоположения с более высокой скоростью обновления, вы получите больше обновлений местоположения.
Я считаю, что это хорошо влияет на срок службы аккумулятора, потребляемого вашим приложением, вы определяете максимальный период времени, который вы можете ожидать, говоря, что если обновление доступно, вы хотите его. Потребление батареи будет зачислено в приложение, которое запрашивает более частые обновления, а не ваши.
Ответ 2
Я пишу свои собственные обновления фона для интервалов каждые 5 минут в android. Я хотел бы знать разницу между setInterval
и setFastestInterval
Предположим, что setFastestInterval();
имеет более высокий приоритет для запроса Location
. В любое приложение, которое вы установили setFastestInterval();
, это будет первое приложение, которое будет выполнено (даже если другие приложения используют LocationServices
).
ex: Если 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;
}
Ответ 3
Также: существует ли встроенная функция для проверки обновлений местоположения только в том случае, если расстояние до первого обновления превышает 20 метров со вторым обновлением?
В LocationRequest есть метод, который вы можете использовать для установки минимального расстояния между обновлениями.
int minimumDistanceBetweenUpdates = 20;
LocationRequest request = new LocationRequest();
request.setMinimumDisplacement(minimumDistanceBetweenUpdates);
// ... request.setInterval(interval); etc