Использование MapBox для запуска пользовательского интерфейса навигации вызывает непредвиденный сбой - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь внедрить компонент навигации в свое приложение, следуя этому руководству MapBox:

https://docs.mapbox.com/help/tutorials/android-navigation-sdk/

Когда я пытаюсь вызвать .startNavigation(...), я получаю неожиданную ошибку:

2020-03-08 19:51:45.786 11394-11394/com.example.mapboxnav A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8 in tid 11394 (mple.mapboxnav), pid 11394 (mple.mapboxnav)

Поскольку приложение, которое я создаю, имеет много кнопок, я реализовал View.OnClickListener и вызываю интерфейс навигации, когда пользователь нажимает кнопку навигации (R.id.startNav). Однако, как только пользователь нажимает кнопку, происходит сбой приложения.

currentRoute работает и отображается на карте при вызове getRoute, как пример . Я убедился, что currentRoute определенно не null. Я также попытался начать навигацию с разными координатами без удачи.

currentRoute содержит маршрут от текущего / последнего известного местоположения пользователя до указанного пункта назначения. Для справки, строка устанавливается / генерируется следующим способом:

public void initLine(Double lng, Double lat) {
        Location lastKnownLocation = mapboxMap.getLocationComponent().getLastKnownLocation();
        Point origin = Point.fromLngLat(lastKnownLocation.getLongitude(), lastKnownLocation.getLatitude());
        Point destination = Point.fromLngLat(lng, lat);
        getRoute(origin, destination);

    }

onClick:

public void onClick(View v) {
        switch (v.getId()) {
            ...

            case R.id.startNav:

                boolean simulateRoute = true;

                NavigationLauncherOptions options = NavigationLauncherOptions.builder()
                        .directionsRoute(currentRoute)
                        .shouldSimulateRoute(simulateRoute)
                        .build();
                NavigationLauncher.startNavigation(MainActivity.this, options); // Causes Crash

        }
    }

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

A SIGSEGV выдается ошибка, когда вы пытаетесь получить доступ к памяти неправильно или обращаетесь к фрагменту памяти, который не выделен для вашего использования. См. Что вызывает SIGSEGV для получения дополнительной информации об этом.

Тот факт, что ошибка возникает в строке ниже,

NavigationLauncher.startNavigation(MainActivity.this, options);

, заставляет меня поверить, что NavigationLauncherOptions options неправильно назначается и, возможно, NULL вызывает разыменование нулевого указателя.

Я знаю, что это не идеальный ответ и на самом деле не дает решения вашей проблемы, но я надеюсь, это помогает приблизить вас к поиску ответа.

Вот несколько ссылок, которые могут помочь (включая документацию): https://github.com/mapbox/mapbox-navigation-android/issues/1529 https://docs.mapbox.com/android/navigation/overview/

0 голосов
/ 10 марта 2020

Хм, очень странно. Я до сих пор чувствую, что в logcat должно быть больше информации. Может быть, намного выше линии Fatal signal 11? Может быть, просто возможно, это связано с Location lastKnownLocation = mapboxMap.getLocationComponent().getLastKnownLocation();. Добавить нулевую проверку для lastKnownLocation и поместить

    Point origin = Point.fromLngLat(lastKnownLocation.getLongitude(), lastKnownLocation.getLatitude());
    Point destination = Point.fromLngLat(lng, lat);
    getRoute(origin, destination);

внутри блока нулевой проверки?

Может быть, вы используете неправильные классы? Посмотрите на активность тестового приложения Nav SDK NavigationLauncher: https://github.com/mapbox/mapbox-navigation-android/blob/master/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java#L342 -L347 . Он использует NavigationLauncherOptions.Builder, а вы нет.

https://github.com/mapbox/mapbox-navigation-android/blob/master/app/src/main/java/com/mapbox/services/android/navigation/testapp/activity/navigationui/NavigationLauncherActivity.java#L365

...