Ascolta gli eventi di navigazione

La tua app può ascoltare gli eventi che si verificano mentre l'utente naviga lungo un percorso.

Panoramica

Utilizza le seguenti interfacce per ascoltare gli eventi di navigazione:

Visualizza il codice

Rileva l'arrivo a una destinazione

In questo caso, per destinazione si intende una destinazione finale o una tappa. A rilevare l'arrivo, chiamare il numero Navigator.addArrivalListener(), che viene registrato per essere richiamato quando il dispositivo raggiunge una destinazione.

All'arrivo, viene attivato l'SDK di navigazione per Android il callback onArrival() e interrompe le indicazioni passo passo. Devi richiamare esplicitamente Navigator.continueToNextDestination() per avanzare alla tappa successiva e Navigator.startGuidance() per continua la navigazione passo passo.

Quando chiami continueToNextDestination(), il navigatore ignora tutti informazioni sulla destinazione precedente. Se vuoi analizzare sul tratto di percorso precedente, devi recuperarle dal navigatore prima di chiamare continueToNextDestination().

Per evitare fughe di memoria, devi chiamare removeArrivalListener(listener) quando non non avranno più bisogno dell'ascoltatore.

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

Ricevi aggiornamenti sulla posizione

Ottieni un RoadSnappedLocationProvider dal NavigationApi, poi chiama RoadSnappedLocationProvider.addLocationListener() per registrarti per una richiamata quando la posizione del dispositivo o l'intestazione del dispositivo cambiano. Tieni presente che questa posizione è agganciata a una strada, quindi potrebbe essere diversa da La posizione restituita dal fornitore di servizi di localizzazione integrato in Google Play le API di localizzazione dei servizi.

L'SDK di navigazione fornisce aggiornamenti sulla posizione con la stessa frequenza possibile. Quando è disponibile un aggiornamento della posizione, L'SDK di navigazione attiva onLocationChanged().

Gli aggiornamenti della posizione sincronizzati sulla strada sono indipendenti dalla navigazione e possono continuerà anche dopo l'interruzione della navigazione. L'iscrizione agli aggiornamenti sulla posizione può causare un consumo eccessivo della batteria, una perdita di memoria o la raccolta accidentale della posizione del dispositivo se mantieni gli aggiornamenti della posizione in esecuzione in background. Chiama RoadSnappedLocationProvider.removeLocationListener quando non hai più bisogno dell'ascoltatore.

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

Ricevi aggiornamenti su tempi e distanza

Chiama il numero Navigator.addRemainingTimeOrDistanceChangedListener() per registrarti per una richiamata quando il tempo rimanente (secondi) o la distanza (metri) varia di più di una determinata soglia.

Quando la variazione di tempo o distanza supera il valore specificato, il valore L'SDK di navigazione attiva onRemainingTimeOrDistanceChanged() di Google.

Per trovare il tempo e la distanza rimanenti, chiama Navigator.getTimeAndDistanceList() Tieni presente che i tempi e le distanze nell'elenco sono cumulativi: mostrano il tempo e la distanza dalla posizione corrente a ogni tappa, non da una tappa all'altra. L'oggetto TimeAndDistance ora restituisce anche delaySeverity. Questa enum pesante, media, leggera o sconosciuta. Corrisponde al colore che visualizza l'orario di arrivo stimato nell'interfaccia utente di Maps (pesante = rosso, medio = giallo, chiaro = verde). Questo è utile se devi creare un tuo piè di pagina ETA.

Per evitare fughe di memoria, devi chiamare Navigator.removeRemainingTimeOrDistanceChangedListener(listener) quando non hai più bisogno dell'ascoltatore.

Nell'esempio riportato di seguito viene richiesta una richiamata se il tempo rimanente cambia di oltre il 60 secondi o la distanza rimanente cambia di oltre 100 metri.

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

Puoi mostrare le informazioni sul tempo rimanente e sulla distanza utilizzando la funzione visualizzare utilizzando il metodo setEtaCardEnabled() e passando un parametro con il valore TRUE. Per ridurre il tempo o la distanza imposta questo valore su FALSE.

Puoi anche esporre l'orario di arrivo stimato per più tappe utilizzando lo getTimeAndDistanceList().

Ricevi aggiornamenti sui percorsi

Chiama Navigator.addRouteChangedListener() per registrati per una richiamata quando il percorso cambia.

Quando il percorso cambia, l'SDK di navigazione attiva la onRouteChanged(). Puoi chiamare Navigator.getRouteSegments e Navigator.getCurrentRouteSegment() per trovare la nuova percorso.

Per evitare fughe di memoria, devi chiamare removeRouteChangedListener(listener) quando non non avranno più bisogno dell'ascoltatore.

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

Rileva il cambio della modalità notturna

Chiama il numero NavigationView.addOnNightModeChangedListener o SupportNavigationFragment.addOnNightModeChangedListener per registrarsi per una richiamata quando viene modificata la modalità notturna.

L'esempio seguente mostra l'ascolto dei cambiamenti della modalità notturna su una frammento di navigazione.

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