Wykrywaj zdarzenia nawigacji

Aplikacja może nasłuchiwać zdarzeń, które mają miejsce, gdy użytkownik porusza się po trasie.

Omówienie

Te interfejsy pozwalają nasłuchiwać zdarzeń nawigacji:

Zobacz kod

Wykrywanie przybycia do celu

W tym przypadku cel podróży oznacza ostateczny cel podróży lub punkt pośredni. Do wykrywanie przyjazdu, nawiązanie połączenia Navigator.addArrivalListener(), który rejestruje wywołanie zwrotne, gdy urządzenie dotrze do miejsca docelowego.

Po dotarciu na miejsce uruchamia się pakiet Navigation SDK na Androida. wywołanie zwrotne onArrival() i zatrzyma wskazówki zakręt po zakręcie. Musisz wywołać Navigator.continueToNextDestination(), aby przejść dalej do następnego punktu pośredniego i Navigator.startGuidance() do kontynuować nawigację zakręt po zakręcie.

Po wywołaniu numeru continueToNextDestination() nawigator odrzuca wszystkie informacje o poprzednim miejscu docelowym. Jeśli chcesz przeanalizować informacji o poprzednim segmencie trasy, należy pobrać informacje w nawigatorze, zanim zadzwonisz pod continueToNextDestination().

Aby uniknąć wycieków pamięci, musisz wywołać removeArrivalListener(listener), jeśli nie na dłużej.

mNavigator.addArrivalListener(new Navigator.ArrivalListener() {
    @Override
    public void onArrival(ArrivalEvent arrivalEvent) {
        displayMessage("onArrival: You've arrived at a waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_BOTH);
        // Start turn-by-turn guidance for the next leg of the route.
        if (arrivalEvent.isFinalDestination()) {
            displayMessage("onArrival: You've arrived at the final destination.",
                    DISPLAY_BOTH);
        } else {
            mNavigator.continueToNextDestination();
            mNavigator.startGuidance();
        }
    }
});

Otrzymywanie aktualizacji lokalizacji

Uzyskaj RoadSnappedLocationProvider z NavigationApi, a następnie zadzwoń RoadSnappedLocationProvider.addLocationListener() aby zarejestrować oddzwonienie po zmianie lokalizacji lub nagłówka urządzenia. Zwróć uwagę, że ta lokalizacja jest przyciągnięta do drogi, więc może się różnić od lokalizacja zwrócona przez dostawcę uśrednionej lokalizacji w Google Play; interfejsów API usług lokalizacji.

Pakiet Navigation SDK dostarcza aktualizacje lokalizacji tak często, jak jak to tylko możliwe. Gdy aktualizacja lokalizacji jest dostępna, Pakiet Navigation SDK uruchamia onLocationChanged() – wywołanie zwrotne.

Aktualizacje lokalizacji przy drodze są niezależne od nawigacji i mogą kontynuować nawet po zatrzymaniu nawigacji. Subskrybowanie aktualizacji lokalizacji może powodować wyczerpywanie się baterii, wyciek pamięci lub niezamierzone zbieranie danych o lokalizacji urządzenia; jeśli pozostawisz aktualizacje lokalizacji uruchomione w tle. Zadzwoń do nas RoadSnappedLocationProvider.removeLocationListener gdy nie potrzebujesz już detektora.

mRoadSnappedLocationProvider =
        NavigationApi.getRoadSnappedLocationProvider(getApplication());
if (mRoadSnappedLocationProvider != null) {
    mRoadSnappedLocationProvider.addLocationListener(
            new RoadSnappedLocationProvider.LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    displayMessage("onLocationUpdated: Navigation engine has provided a new"
                                    + " road-snapped location: "
                                    + location.toString(),
                            DISPLAY_LOG);
                }
            });
} else {
    displayMessage("ERROR: Failed to get a location provider", DISPLAY_LOG);
}

Otrzymuj aktualne informacje o czasie i dystansie

Zadzwoń pod numer Navigator.addRemainingTimeOrDistanceChangedListener() do zarejestrowania się na wywołanie zwrotne po upływie pozostałego czasu (w sekundach) lub dystansu (w metrach) o więcej niż określony próg.

Gdy zmiana czasu lub dystansu przekroczy ustaloną wartość, Pakiet Navigation SDK uruchamia onRemainingTimeOrDistanceChanged() oddzwanianie.

Aby sprawdzić pozostały czas i dystans, zadzwoń pod numer Navigator.getTimeAndDistanceList() Pamiętaj, że parametr czasy i odległości na liście są skumulowane: przedstawiają czas i dystans. od bieżącej lokalizacji do każdego punktu pośredniego, a nie z jednego punktu do drugiego. Obiekt TimeAndDistance zwraca teraz także delaySeverity. To enum będzie ciężki, lekki, lekki lub nieznany. Odpowiada to kolorowi, sprawdź w interfejsie eta w interfejsie Map (intensywne = czerwone, średnie = żółty, jasny = zielony). To jest przydatne, jeśli chcesz utworzyć własną stopkę eta.

Aby uniknąć wycieków pamięci, musisz wywołać Navigator.removeRemainingTimeOrDistanceChangedListener(listener) gdy nie potrzebujesz już detektora.

Poniższy przykład wymaga wywołania zwrotnego, jeśli pozostały czas zmieni się o więcej niż 60 sekund lub pozostały dystans zmieni się o ponad 100 metrów.

mNavigator.addRemainingTimeOrDistanceChangedListener(60, 100,
        new Navigator.RemainingTimeOrDistanceChangedListener() {
            @Override
            public void onRemainingTimeOrDistanceChanged() {
                displayMessage("onRemainingTimeOrDistanceChanged: Time or distance estimate"
                        + " has changed.",
                        DISPLAY_LOG);
            }
        });

Wbudowany moduł, w którym możesz wyświetlać informacje o pozostałym czasie i odległości wyświetlanie za pomocą metody setEtaCardEnabled() i przekazywanie parametru o wartości TRUE. Ograniczanie czasu/odległości wyświetl, ustaw tę wartość na FALSE.

Możesz też udostępnić szacowany czas dotarcia na miejsce dla wielu punktów pośrednich za pomocą getTimeAndDistanceList().

Otrzymuj aktualne informacje o trasach

Zadzwoń pod numer Navigator.addRouteChangedListener() zarejestrować się na wywołanie zwrotne po zmianie trasy.

Gdy trasa się zmieni, pakiet Navigation SDK uruchamia komponent onRouteChanged() – wywołanie zwrotne. Możesz zadzwonić do nas, Navigator.getRouteSegments i Navigator.getCurrentRouteSegment(), aby znaleźć nowe .

Aby uniknąć wycieków pamięci, musisz wywołać removeRouteChangedListener(listener), jeśli nie na dłużej.

mNavigator.addRouteChangedListener(new Navigator.RouteChangedListener() {
    @Override
    public void onRouteChanged() {
        displayMessage("onRouteChanged: The driver's route has changed. Current waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_LOG);
    }
});

Wykrywaj po zmianie trybu nocnego

Zadzwoń pod numer NavigationView.addOnNightModeChangedListener lub SupportNavigationFragment.addOnNightModeChangedListener aby zarejestrować się na oddzwonienie po zmianie trybu nocnego.

Przykład poniżej pokazuje nasłuchiwanie zmian w trybie nocnym na urządzeniu fragment nawigacji.

mNavFragment.addOnNightModeChangedListener(new NavigationView.OnNightModeChangedListener() {
    @Override
    public void onNightModeChanged(NightModeChangedEvent nightModeChangedEvent) {
        displayMessage("Night mode is active: " + nightModeChangedEvent.inNightMode(),
        DISPLAY_LOG);
    }
});