Как установить LocationEngine для NavigationView во фрагменте

Я хочу раздувать mapbox NavigationView во фрагменте. Пока это работает нормально, когда я установил shouldSimulateRoute параметр для true в startNavigation вызов функции. Если я установлю это false однако NavigationView не обновляется при изменении местоположения, и я думаю, что видел, что внутренний locationlayerplugin нулевой. Я не вижу способа установить это. Должен ли я создать свое собственное местоположение двигателя и звонить navigationView.updateLocationLayer(location) на месте смены? Это как будто останавливает мое приложение.

Вот мой фрагмент кода:

public class TestNavFrag extends Fragment implements OnNavigationReadyCallback, LocationEngineListener
{

private NavigationView navigationView;
private LocationEngine locationEngine;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_navigation, container, false);

    Mapbox.getInstance(getActivity(), getString(R.string.access_token));

    navigationView = view.findViewById(R.id.navigationView);
    navigationView.onCreate(savedInstanceState);
    navigationView.getNavigationAsync(this);

    return view;
}

@Override
public void onNavigationReady() {
    //uncomment to try with own locationengine
    //initLocationEngine();

    //parameter sets shouldSimulateRoute
    launchNavigationWithRoute(true);
}

@SuppressWarnings({"MissingPermission"})
private void initLocationEngine() {
    locationEngine = new LostLocationEngine(getActivity());
    locationEngine.setPriority(HIGH_ACCURACY);
    locationEngine.setInterval(0);
    locationEngine.setFastestInterval(1000);
    locationEngine.addLocationEngineListener(this);
    locationEngine.activate();

    if (locationEngine.getLastLocation() != null) {
        Location lastLocation = locationEngine.getLastLocation();
        onLocationChanged(lastLocation);
    }
}

@SuppressWarnings({"MissingPermission"})
@Override
public void onConnected() {
    locationEngine.requestLocationUpdates();
}

@Override
public void onLocationChanged(Location location) {
    navigationView.updateLocationLayer(location);
}

private void launchNavigationWithRoute(Boolean shouldSimulateRoute) {
    MapboxNavigationOptions navigationOptions = MapboxNavigationOptions.builder()
            .unitType(NavigationUnitType.TYPE_METRIC)
            .build();


    Point origin = Point.fromLngLat(13.404954, 52.520007);
    Point destination = Point.fromLngLat(13.402308, 52.516375);

    NavigationViewOptions.Builder options_builder = NavigationViewOptions.builder()
            .origin(origin)
            .destination(destination)
            .shouldSimulateRoute(shouldSimulateRoute)
            .navigationOptions(navigationOptions);
    NavigationViewOptions options = options_builder.build();

    navigationView.startNavigation(options);

}
}

Любые подсказки относительно того, что я делаю неправильно, будут чрезвычайно ценны! Спасибо!

0 ответов

Другие вопросы по тегам