Разница между LocationRequest setInterval (длинные миллисекунды) и LocationRequest setFastestInterval (длинные миллисекунды)

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

Когда я устанавливаюInterval на 5 минут и устанавливаюFastestInterval на 2 минуты. Обновление местоположения вызывается каждые 2 минуты.

Хотелось бы узнать разницу. Я не мог понять, что именно написано на странице разработчика для этого https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html

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

Спасибо!


person TheDevMan    schedule 30.09.2014    source источник


Ответы (4)


На основе соответствующей документации Android:

  • setInterval(long) означает - установить интервал, в котором вы хотите получить локации.
  • setFastestInterval(long) означает, что если местоположение доступно раньше, вы можете его получить (т. Е. Другое приложение использует службы определения местоположения).

Например, вы запускаете свое приложение и регистрируете его через setInterval(60*1000), это означает, что вы будете получать обновления каждые 60 секунд.

Теперь вы звоните setFastestInterval(10*1000). Если вы единственное приложение, которое использует службы определения местоположения, вы будете продолжать получать обновления примерно каждые 60 секунд. Если другое приложение использует службы определения местоположения с более высокой частотой обновлений, вы будете получать больше обновлений местоположения (но не чаще, чем каждые 10 секунд).

Я считаю, что это хорошо влияет на время автономной работы, потребляемое вашим приложением, вы определяете максимальное количество времени, которое можете подождать, говоря, что если обновление доступно, вы его хотите. Расход заряда батареи будет засчитан приложению, которое запрашивало более частые обновления, а не вашему.

person Ohad Zadok    schedule 16.10.2014
comment
Спасибо за указание на расход заряда батареи будет засчитано приложению, которое запрашивает его чаще. - person Amit Kumar; 13.01.2016
comment
как указано в других комментариях, вы также можете установить опцию для получения обновлений местоположения, если соблюдены критерии минимального расстояния. Используйте mLocationRequest.setSmallestDisplacement(10.0), что означает получение обновления местоположения, только если смещение равно 10 meters - person kishorer747; 29.11.2016
comment
@ kishorer747 Вау, я просто собираюсь реализовать это вручную, если я не прочитал ваш комментарий! Теперь чувствуй себя глупо. - person Moses Aprico; 06.07.2017
comment
С точки зрения заряда батареи способ @ kishorer747 не будет эффективным, если никакое другое приложение не использует GPS, оно будет проверять изменения местоположения. - person Ohad Zadok; 06.07.2017
comment
просто спрашиваю, используя setFastestInterval, есть ли вероятность того, что сигнал будет заблокирован? потому что мы получаем сигналы отовсюду, если мы стоим в городе или людном месте? - person Ashana.Jackol; 17.10.2017
comment
вы получаете местоположение, созданное устройством, поэтому я думаю, что ответ отрицательный. - person Ohad Zadok; 17.10.2017

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

В LocationRequest есть метод, который можно использовать для установки минимального расстояния между обновлениями.

int minimumDistanceBetweenUpdates = 20;

LocationRequest request = new LocationRequest();
request.setMinimumDisplacement(minimumDistanceBetweenUpdates);
// ... request.setInterval(interval); etc
person user2120910    schedule 07.03.2015
comment
используйте этот mLocationRequest.setSmallestDisplacement (SMALL_DISPLACEMENT_DISTANCE); - person Syed Raza Mehdi; 30.07.2015
comment
@Syed Raza Mehdi, почему я его использую? - person luke cross; 22.06.2020

Я пишу свои собственные фоновые обновления местоположения каждые 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
comment
Если вы работаете с объектом Location из sdk, существует функция distanceTo == ›developer.android.com/reference/android/location/ - person mrroboaat; 03.01.2015

setInterval (long millis) Этот интервал неточный. Вы можете вообще не получать обновления (если источники местоположения недоступны) или получать их медленнее, чем запрошено. Вы также можете получать их быстрее, чем запрашивали (если другие приложения запрашивают местоположение с более быстрым интервалом). Самую быструю скорость получения обновлений можно контролировать с помощью setFastestInterval (long). По умолчанию эта максимальная скорость в 6 раз превышает интервальную частоту.

setFastestInterval (long millis) В отличие от setInterval (long), этот параметр является точным. Ваше приложение никогда не будет получать обновления быстрее этого значения. Если вы не вызываете этот метод, для вас будет выбран самый быстрый интервал. Это будет значение быстрее, чем ваш активный интервал (setInterval (long)).

person Haritha Reddy    schedule 31.05.2018