Різниця між набором запитів LocationInterval (довгий міліс) та набором запитів LocationFastestInterval (довгий міліс)


78

Я пишу власні оновлення фонового розташування для інтервалу кожні 5 хвилин в android. Я хотів би знати різницю між setInterval та setFastestInterval

Коли я встановлюю Interval на 5 хвилин, а SetFastestInterval - на 2 хвилини. Оновлення місцезнаходження викликається кожні 2 хв.

Я хотів би знати різницю. Я не міг зрозуміти, що саме написано на сторінці розробника для цього https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

Також: чи існує вбудована функція перевірки оновлень розташування, лише якщо відстань першого оновлення перевищує 20 метрів з другим оновленням?

Дякую!

Відповіді:


114

На основі відповідної документації Android :

  • setInterval(long) засоби - встановити інтервал, в який ви хочете отримати місцезнаходження.
  • setFastestInterval(long) означає - якщо локація доступна раніше, ви зможете її отримати (тобто інша програма використовує служби локації).

Наприклад, ви запускаєте свою програму та реєструєте її через setInterval(60*1000), це означає, що ви будете отримувати оновлення кожні 60 секунд.

Тепер ти дзвониш setFastestInterval(10*1000). Якщо ви є єдиним додатком, який використовує служби локації, ви й надалі отримуватимете оновлення приблизно кожні 60 секунд. Якщо інший додаток використовує служби визначення місцезнаходження з вищою швидкістю оновлень, ви отримуватимете більше оновлень місцезнаходження (але не частіше, ніж кожні 10 секунд).

Я вважаю, що це добре впливає на час автономної роботи, який витрачає ваш додаток. Ви визначаєте максимальну кількість часу, який можна чекати, кажучи, що якщо оновлення доступне, ви хочете його отримати. Споживання батареї зараховується до програми, яка вимагала більш часті оновлення, а не до вашого.


4
Дякуємо, що вказали, що споживання батареї буде зараховано додатку, який запитує його частіше.
Аміт Кумар

3
як зазначалося в інших коментарях, ви також можете встановити опцію отримувати оновлення місцезнаходження, якщо дотримано мінімальні критерії відстані. Використовуйте, mLocationRequest.setSmallestDisplacement(10.0)що означає отримання оновлення місцезнаходження, лише якщо переміщення є10 meters
kishorer747

@ kishorer747 нічого собі, я просто збираюся реалізувати це вручну, якщо я не прочитав ваш коментар! Почувайся безглуздо зараз.
Moses Aprico

1
З точки зору заряду акумулятора, спосіб @ kishorer747 буде неефективним, якщо жодна інша програма не використовує GPS, вона перевірятиме місце розташування.
Охад Задок

просто запитую, використовуючи setFastestInterval, чи існує ймовірність виникнення заклинення сигналу? тому що ми отримуємо сигнали звідусіль, якщо ми стоїмо в місті чи в людній зоні?
Ашана. Яколь

9

Також: чи існує вбудована функція для перевірки оновлень розташування, лише якщо відстань першого оновлення перевищує 20 метрів з другим оновленням?

LocationRequest має метод, за допомогою якого можна встановити мінімальну відстань між оновленнями.

int minimumDistanceBetweenUpdates = 20;

LocationRequest request = new LocationRequest();
request.setMinimumDisplacement(minimumDistanceBetweenUpdates);
// ... request.setInterval(interval); etc

5
використовувати цей mLocationRequest.setSmallestDisplacement (SMALL_DISPLACEMENT_DISTANCE);
Сайед Раза Мехді

@Syed Raza Mehdi, чому я цим користуюся?
luke cross

5

Я пишу власні оновлення фонового розташування для інтервалу кожні 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; //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;
}

7
Якщо ви працюєте з об'єктом Location з sdk, існує функція distanceTo ==> developer.android.com/reference/android/location/…
mrroboaat

1

setInterval (довгий міліс) Цей інтервал є неточним. Ви можете взагалі не отримувати оновлення (якщо джерела місцезнаходжень відсутні) або отримувати їх повільніше, ніж просили. Ви також можете отримати їх швидше, ніж запитували (якщо інші програми вимагають визначення місця з більш швидким інтервалом). Найшвидший показник отримання оновлень можна контролювати за допомогою setFastestInterval (long). За замовчуванням ця найшвидша швидкість становить 6-кратну інтервальну частоту.

setFastestInterval (long millis) На відміну від setInterval (long), цей параметр є точним. Ваша програма ніколи не отримуватиме оновлення швидше, ніж це значення. Якщо ви не викличете цей метод, для вас буде обрано найшвидший інтервал. Це буде значення швидше, ніж ваш активний інтервал (setInterval (long)).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.