Когда использовать LocationManager / LocationListener VS.LocationServices / LocationCallback для отслеживания местоположения пользователя? - PullRequest
0 голосов
/ 24 декабря 2018

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

# 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 нужны новые библиотеки 'реализации', но это не так уж и сложно

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

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

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

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

1 Ответ

0 голосов
/ 25 декабря 2018

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

Кажется, что оба они достигают того же, отслеживать и обновлять местоположение текущего пользователя.

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

В конце концов, они оба одинаково многословны и имеют одинаковую сложность.

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

# 2 нужны новые библиотеки «реализации», но это не так уж и накладно

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...