MapBox: получение latitude () и longitude () для LocationComponent - PullRequest
0 голосов
/ 23 января 2019

У меня проблемы с использованием locationComponent () для получения широты () и долготы () местоположения устройства. Я перехожу с более старой версии MapBox SDK на последнюю версию 7.0.1

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

Вот мой код:

 private void enableLocationComponent() {
    locationEngine = new LocationEngineProvider(this).obtainLocationEngineBy(LocationEngine.Type.GOOGLE_PLAY_SERVICES);
    locationEngine.setInterval(1000);//this is means get location every 1 second
    locationEngine.setFastestInterval(1000);
    locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);

    // Check if permissions are enabled and if not request
    if (PermissionsManager.areLocationPermissionsGranted(this)) {

        // Get an instance of the component
        LocationComponent locationComponent = mapboxMap.getLocationComponent();
        locationComponent.getLastKnownLocation();

        // Activate
        locationComponent.activateLocationComponent(this,mapboxMap.getStyle());

        // Enable to make component visible
        locationComponent.setLocationComponentEnabled(true);

        // Set the component's camera mode
        locationComponent.setCameraMode(CameraMode.TRACKING);

        // Set the component's render mode
        locationComponent.setRenderMode(RenderMode.COMPASS);
    } else {
        permissionsManager = new PermissionsManager(this);
        permissionsManager.requestLocationPermissions(this);
    }
}

Я надеюсь, что решение вопроса будет дано, или расскажите мне, что я пропустил, и кратко объяснил. Спасибо!

Зависимость:

 // Mapbox Maps SDK dependency
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:7.0.1'

// Mapbox Services SDK dependency to retrieve direction routes
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-services:4.3.0'
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-turf:4.3.0'

1 Ответ

0 голосов
/ 23 января 2019

Вы должны позвонить

locationEngine.getLastLocation(new LocationEngineCallback<LocationEngineResult>() {
  @Override
  public void onSuccess(LocationEngineResult result) {
    Location location = result.getLastLocation();
    if (location != null) {
      // process last location
    }
  }

  @Override
  public void onFailure(@NonNull Exception exception) {
    // failure
  }
});

Выше приведен асинхронный вызов, который возвратит местоположение последнего известного устройства.

С другой стороны,

locationComponent.getLastKnownLocation();

вернет последнее известное / отображаемое местоположение на карте по компоненту, которое в вашем случае всегда будет null, потому что выкомпонент еще не активирован или не включен.

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

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