Когда использовать LocationManager / LocationListener VS. LocationServices / LocationCallback для отслеживания местоположения пользователя?

Я реализовал отслеживание геолокации пользователей следующим образом:

# 1

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            mMap.clear();
            repaintUserLocationPin(location);
        }

# 2

locationProviderClient = LocationServices.getFusedLocationProviderClient(this);

locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        List<Location> locationList = locationResult.getLocations();
        if (locationList.size() > 0) {
            //The last location in the list is the newest
            Location location = locationList.get(locationList.size() - 1);

            mLastLocation = location;
            if (mCurrLocationMarker != null) {
                mCurrLocationMarker.remove();
            }

            repaintUserLocationPin(mLastLocation);
        }
    }
};

Подводя итог ИМХО:

  • Они оба, похоже, достигают одного и того же, отслеживают и обновляют местоположение текущего пользователя.
  • В конце концов, они оба одинаково подробны и имеют одинаковую сложность.
  • # 2 нужны новые библиотеки "реализации", но это не слишком накладные расходы

С другой стороны, есть решение 3-й, но это не позволяет мне получить обновленное текущее местоположение пока не, я нажимаю Кнопка геолокации на карте. Я говорю о:

    map.setOnMyLocationButtonClickListener(new GeolocateBtnClickListener(MapsActivity.this));
    map.setOnMyLocationClickListener(new GeolocateClickListener(MapsActivity.this));

У этого есть одно БОЛЬШОЕ преимущество: маркер создается автоматически и намного лучше реагирует на движения пользователя. Например, он указывает на директорию, на которую указывает пользователь.

Итак, зачем использовать одно вместо другого или в каких случаях вы бы порекомендовали использовать одно вместо другого?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
114
1

Ответы 1

Все ниже только мое мнение

These both seem to achieve the same,track and update the current user's location.

Разницу можно понять с их расположением способов получения. LocationManager дает нам возможность выбрать источник местоположения. Итак, мы можем выбрать любой источник из gps, сетевых или пассивных альтернатив. Но LocationServices не дает такой возможности, вместо этого дает вкус местоположения, баланс между качеством и использованием батареи.

At the end of the day, they are both equally verbose and have the same complexity.

Их настройка кажется немного такой же, но LocationServices может быть первым вариантом. Выбор качества / мощности кажется более разумным, чем иметь дело с провайдерами.

#2 needs new 'implementation' libraries but, this isn't much of an overhead

LocationManager доступен с версии 1, а LocationServices доступен, если устройство поддерживает сервисы воспроизведения.

Другие вопросы по теме