Я пишу власні оновлення фонового розташування для інтервалу кожні 5 хвилин в android. Я хотів би знати різницю між setInterval
іsetFastestInterval
Припустимо, що setFastestInterval();
запит a має вищий пріоритет 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;
}