Запустите интерфейс навигации Mapbox, используя объект MapboxNavigation - PullRequest
0 голосов
/ 19 февраля 2020

Я успешно запускаю пользовательский интерфейс навигации Mapbox, используя эту строку кода:

NavigationLauncher.startNavigation(MainActivity.this, options);

Но я хочу начать сеанс навигации с использованием объекта MapboxNavigation, чтобы я мог реализовать слушателей Например: OffRouteListener.

. Для этого я использую следующий код, но никакой навигационный интерфейс не отображается.

Я даже не уверен, что MapboxNavigation#startNavigation должен запускать любой визуальный компонент.

MapboxNavigation mapboxNavigation = new MapboxNavigation(MainActivity.this, accessToken, mapboxNavigationOptions);
mapboxNavigation.addOffRouteListener(location -> {
   // do things
});
mapboxNavigation.startNavigation(directionsRoute);

1 Ответ

1 голос
/ 28 февраля 2020

В этом примере в документации Mapbox Android показано, как запустить компонент визуальной навигации с помощью MapboxNavigation#startNavigation в сочетании с OffRouteListener. Соответствующий раздел исходного кода (также связанный здесь ):

@OnClick(R.id.startRouteButton)
public void onStartRouteClick() {
  boolean isValidNavigation = navigation != null;
  boolean isValidRoute = route != null && route.distance() > TWENTY_FIVE_METERS;
  if (isValidNavigation && isValidRoute) {

    // Hide the start button
    startRouteButton.setVisibility(View.INVISIBLE);

    // Attach all of our navigation listeners.
    navigation.addNavigationEventListener(this);
    navigation.addProgressChangeListener(this);
    navigation.addMilestoneEventListener(this);
    navigation.addOffRouteListener(this);

    ((ReplayRouteLocationEngine) locationEngine).assign(route);
    navigation.setLocationEngine(locationEngine);
    mapboxMap.getLocationComponent().setLocationComponentEnabled(true);
    navigation.startNavigation(route);
      mapboxMap.removeOnMapClickListener(this);
  }
}

Переменная navigation инициализируется здесь как экземпляр MapboxNavigation .

Итак, добавление строк

((ReplayRouteLocationEngine) locationEngine).assign(route);
mapboxNavigation.setLocationEngine(locationEngine);
mapboxMap.getLocationComponent().setLocationComponentEnabled(true);

Перед вызовом mapboxNavigation.startNavigation(directionsRoute); в вашей реализации должно помочь. Также следует убедиться, что объект directionsRoute является правильно сформулированным экземпляром класса DirectionsRoute.

...