Запустите интерфейс навигации Mapbox с помощью объекта MapboxNavigation

Я успешно запускаю навигационный интерфейс 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);

person qwlice    schedule 19.02.2020    source источник


Ответы (1)


В этом примере в документации 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.

person Adriana Babakanian    schedule 28.02.2020