使用 MapboxNavigation 对象启动 Mapbox Navigation UI

Start Mapbox Navigation UI using MapboxNavigation object

我使用这行代码成功启动了 Mapbox 导航 UI:

NavigationLauncher.startNavigation(MainActivity.this, options);

但我想使用 MapboxNavigation 对象启动导航会话,以便我可以实现侦听器 EG:OffRouteListener.

为此,我使用了以下代码,但未显示导航 UI。

我什至不确定 MapboxNavigation#startNavigation 是否应该启动任何可视组件。

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

This example in the Mapbox Android documentation shows how to start a visual navigation component using MapboxNavigation#startNavigation, in conjunction with an OffRouteListener. The relevant section of the source code (also linked here) 是:

@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 变量被初始化 here 作为 MapboxNavigation 的实例。

因此,添加行

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

在您的实施中调用 mapboxNavigation.startNavigation(directionsRoute); 之前应该可以解决问题。您还应确保 directionsRoute 对象是 DirectionsRoute class.

的正确表述实例