Navigationsereignisse im Blick behalten

Ihre App kann auf Ereignisse warten, die auftreten, wenn der Nutzer entlang einer Route navigiert.

Übersicht

Verwenden Sie die folgenden Oberflächen, um Navigationsereignisse zu überwachen:

Code

Ankunft an einem Ziel erkennen

Hier bezeichnet ein Ziel entweder ein endgültiges Ziel oder einen Wegpunkt. Bis Ankunft erkennen, Navigator.addArrivalListener() anrufen, die sich für einen Rückruf registriert, wenn das Gerät ein Ziel erreicht.

Nach der Ankunft wird das Navigation SDK for Android ausgelöst. den onArrival()-Callback und stoppt die detaillierte Routenführung. Sie müssen explizit einen Aufruf Navigator.continueToNextDestination(), um fortzufahren zum nächsten Wegpunkt und Navigator.startGuidance() zum die detaillierte Routenführung fortführen.

Wenn Sie continueToNextDestination() aufrufen, verwirft der Navigator alle Informationen zum vorherigen Ziel. Zum Analysieren Daten zum vorherigen Routensegment zu erhalten, müssen Sie die Informationen im Navigator, bevor Sie continueToNextDestination() aufrufen.

Um Speicherlecks zu vermeiden, müssen Sie removeArrivalListener(listener) aufrufen, wenn Sie den Zuhörer nicht mehr benötigen.

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();
        }
    }
});

Standortaktualisierungen empfangen

Sie erhalten ein RoadSnappedLocationProvider aus dem NavigationApi, dann anrufen RoadSnappedLocationProvider.addLocationListener() , um sich für einen Callback zu registrieren, wenn sich der Standort oder die Richtung des Geräts ändert. Beachten Sie, dass diese Position an einer Straße ausgerichtet ist und sich daher von der den Standort, der vom Anbieter für kombinierte Standortbestimmung in Google Play zurückgegeben wird Standort-APIs der Dienste.

Das Navigation SDK stellt Standortupdates so oft wie möglich möglich. Wenn ein Standortupdate verfügbar ist, Das Navigation SDK löst die onLocationChanged()-Callback

Updates zu angefahrenen Straßen sind unabhängig von der Navigation und können wenn die Navigation unterbrochen wurde. Wenn du Standortupdates abonnierst, zu Akkuentladung, Speicherleck oder unbeabsichtigter Erfassung des Gerätestandorts führen. wenn die Standortaktualisierungen im Hintergrund laufen. Anruf RoadSnappedLocationProvider.removeLocationListener wenn Sie den Zuhörer nicht mehr benötigen.

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);
}

Aktuelle Informationen zu Zeit und Entfernung erhalten

Navigator.addRemainingTimeOrDistanceChangedListener() anrufen , um sich für einen Callback zu registrieren, wenn die verbleibende Zeit (Sekunden) oder die Entfernung (Meter) ändert sich um mehr als einen bestimmten Grenzwert.

Überschreitet die Zeit- oder Entfernungsänderung den angegebenen Wert, wird das Das Navigation SDK löst die onRemainingTimeOrDistanceChanged() Callback des Nutzers an.

Um die verbleibende Zeit und die Strecke zu ermitteln, rufen Sie Navigator.getTimeAndDistanceList() Das Feld Zeiten und Entfernungen in der Liste sind kumuliert, d. h., sie zeigen die Zeit und die Entfernung an. von der aktuellen Position zum jeweiligen Wegpunkt, nicht von einem Wegpunkt zum anderen. Das TimeAndDistance-Objekt gibt jetzt auch delaySeverity zurück. Diese Aufzählung wird entweder schwer, meduim, leicht oder unbekannt sein. Dies entspricht der Farbe, Siehe „eta“ in der Karten-UI (schwer = rot, mittel = gelb, hell = grün). Dies ist ist hilfreich, wenn Sie Ihre eigene ETA-Fußzeile erstellen müssen.

Um Speicherlecks zu vermeiden, müssen Sie Navigator.removeRemainingTimeOrDistanceChangedListener(listener) wenn Sie den Zuhörer nicht mehr benötigen.

Im folgenden Beispiel wird ein Callback angefordert, wenn sich die verbleibende Zeit um mehr als 60 Sekunden oder die verbleibende Strecke ändert sich um mehr als 100 Meter.

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

Sie können die verbleibende Zeit und Entfernung mithilfe der integrierten Anzeige mithilfe der Methode setEtaCardEnabled() und einen Parameter mit dem Wert TRUE übergeben. Um Zeit/Entfernung zu unterdrücken Display verwenden, legen Sie diesen Wert auf FALSE fest.

Sie können die voraussichtliche Ankunftszeit auch für mehrere Wegpunkte anzeigen lassen, indem Sie die getTimeAndDistanceList()-Methode.

Aktuelle Routeninformationen erhalten

Navigator.addRouteChangedListener() anrufen für registrieren Sie sich für einen Callback, wenn sich die Route ändert.

Wenn sich die Route ändert, löst das Navigation SDK die onRouteChanged()-Callback Sie können Navigator.getRouteSegments und Navigator.getCurrentRouteSegment(), um das neue Route.

Um Speicherlecks zu vermeiden, müssen Sie removeRouteChangedListener(listener) aufrufen, wenn Sie den Zuhörer nicht mehr benötigen.

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);
    }
});

Erkennen, wenn sich der Nachtmodus ändert

Rufen Sie unter NavigationView.addOnNightModeChangedListener an oder SupportNavigationFragment.addOnNightModeChangedListener , um sich für einen Rückruf beim Wechsel des Nachtmodus zu registrieren.

Das folgende Beispiel zeigt, wie auf Änderungen des Nachtmodus Navigationsfragment.

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