Ascolta gli eventi di navigazione

L'app può ascoltare gli eventi che si verificano durante la navigazione dell'utente lungo il percorso.

Panoramica

Utilizza le seguenti interfacce per ascoltare gli eventi di navigazione:

Visualizza il codice

Rileva l'arrivo a una destinazione

In questo caso, una destinazione fa riferimento a una destinazione finale o a un waypoint. Per rilevare l'arrivo, chiama il numero Navigator.addArrivalListener(), che si registra per ricevere un callback quando il dispositivo raggiunge una destinazione.

All'arrivo, l'SDK di navigazione per Android attiva il callback onArrival() e interrompe le indicazioni passo passo. Devi chiamare esplicitamente Navigator.continueToNextDestination() per avanzare al waypoint successivo e Navigator.startGuidance() per continuare la navigazione passo passo.

Quando chiami continueToNextDestination(), la barra di navigazione ignora tutte le informazioni sulla destinazione precedente. Se vuoi analizzare le informazioni sul tratto di percorso precedente, devi recuperare le informazioni dal navigatore prima di chiamare continueToNextDestination().

Per evitare perdite di memoria, devi chiamare removeArrivalListener(listener) quando il listener non è più necessario.

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

Richiedi un RoadSnappedLocationProvider da NavigationApi, quindi chiama RoadSnappedLocationProvider.addLocationListener() per registrarti per ricevere un callback quando la posizione o l'intestazione del dispositivo cambiano. Tieni presente che questa località è agganciata a una strada, pertanto potrebbe essere diversa dalla località restituita dal provider di posizione integrato nelle API di geolocalizzazione di Google Play Services.

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

Gli aggiornamenti della posizione individuati automaticamente sono indipendenti dalla navigazione e possono continuare anche dopo l'interruzione della navigazione. L'iscrizione agli aggiornamenti della posizione potrebbe causare il consumo eccessivo della batteria, una perdita di memoria o una raccolta involontaria di dati sulla posizione del dispositivo se lasci in esecuzione gli aggiornamenti della posizione 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 tempo e distanza

Chiama Navigator.addRemainingTimeOrDistanceChangedListener() per registrarti per un callback quando il tempo rimanente (secondi) o la distanza (metri) varia di oltre una determinata soglia.

Quando la variazione di tempo o distanza supera la quantità specificata, l'SDK di navigazione attiva il callback onRemainingTimeOrDistanceChanged().

Per sapere il tempo rimanente e la distanza, chiama il numero Navigator.getTimeAndDistanceList(). Tieni presente che i tempi e le distanze nell'elenco sono cumulativi: mostrano il tempo e la distanza dalla posizione corrente a ciascun waypoint, non da un waypoint all'altro. L'oggetto TimeAndDistance ora restituisce anche delaySeverity. L'enum sarà pesante, media, leggera o sconosciuta. corrisponde al colore che vedi su ATE nell'interfaccia utente di Maps (pesante = rosso, medio = giallo, chiaro = verde). Questa funzionalità è utile se devi creare un piè di pagina dell'orario di arrivo stimato.

Per evitare perdite di memoria, devi chiamare Navigator.removeRemainingTimeOrDistanceChangedListener(listener) quando non hai più bisogno del listener.

L'esempio riportato di seguito richiede un callback se il tempo rimanente cambia di più di 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 il display integrato utilizzando il metodo setEtaCardEnabled() e trasmettendo un parametro con il valore TRUE. Per disattivare la visualizzazione dell'ora e della distanza, imposta questo valore su FALSE.

Puoi anche mostrare l'orario di arrivo stimato per più tappe utilizzando il metodo getTimeAndDistanceList().

Ricevi aggiornamenti sul percorso

Chiama il numero Navigator.addRouteChangedListener() per registrarti per un callback quando il percorso cambia.

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

Per evitare perdite di memoria, devi chiamare removeRouteChangedListener(listener) quando il listener non è più necessario.

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 di modalità notturna

Chiama il numero NavigationView.addOnNightModeChangedListener o SupportNavigationFragment.addOnNightModeChangedListener per ricevere un callback quando cambia la modalità notturna.

L'esempio seguente mostra l'ascolto di modifiche alla modalità notturna su un frammento di navigazione.

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