Как установить 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);
}
}
Любые подсказки относительно того, что я делаю неправильно, будут чрезвычайно ценны! Спасибо!