Écouter les événements de navigation

Votre application peut écouter les événements qui se produisent lorsque l'utilisateur parcourt un itinéraire.

Présentation

Utilisez les interfaces suivantes pour écouter les événements de navigation:

Voir le code

Détecter l'arrivée à une destination

Ici, une destination désigne soit une destination finale, soit un point de cheminement. À détecter l'arrivée, appeler Navigator.addArrivalListener(), qui s'enregistre pour un rappel lorsque l'appareil atteint une destination.

À leur arrivée, le SDK Navigation pour Android se déclenche le rappel onArrival() et arrête le guidage détaillé. Vous devez appeler explicitement Navigator.continueToNextDestination() pour avancer au point de cheminement suivant, et Navigator.startGuidance() pour continuer la navigation détaillée.

Lorsque vous appelez continueToNextDestination(), le navigateur supprime tout des informations sur la destination précédente. Si vous souhaitez analyser sur le segment de route précédent, vous devez récupérer les informations à partir du navigateur avant d'appeler continueToNextDestination().

Pour éviter les fuites de mémoire, vous devez appeler removeArrivalListener(listener) lorsque vous n'utilisez n'ont plus besoin de l'écouteur.

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

Recevoir des mises à jour de localisation

Obtenez un RoadSnappedLocationProvider à partir de NavigationApi, puis appelez RoadSnappedLocationProvider.addLocationListener() pour demander à recevoir un rappel lorsque l'emplacement ou l'orientation de l'appareil change. Notez que ce lieu est aligné sur une route et qu'il peut donc être différent de la position renvoyée par Fused Location Provider dans l'API Google Play ; de localisation des services.

Le SDK Navigation fournit des mises à jour de la position possible. Lorsqu'une mise à jour de la position est disponible, le Le SDK Navigation déclenche Rappel onLocationChanged().

Ces mises à jour de position ne dépendent pas de la navigation et peuvent même après l'arrêt de la navigation. S'abonner aux mises à jour de la position peut provoquer une décharge de la batterie, une fuite de mémoire ou la collecte involontaire de la position de l'appareil si vous laissez les mises à jour de position s'exécuter en arrière-plan. Appeler RoadSnappedLocationProvider.removeLocationListener lorsque vous n'avez plus besoin de l'écouteur.

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

Recevoir des informations sur le temps et la distance

Appeler Navigator.addRemainingTimeOrDistanceChangedListener() pour demander un rappel lorsque le temps restant (secondes) ou la distance (mètres) change de plus d'un seuil donné.

Lorsque la variation du temps ou de la distance dépasse la valeur spécifiée, la Le SDK Navigation déclenche onRemainingTimeOrDistanceChanged() .

Pour connaître le temps et la distance restants, appelez Navigator.getTimeAndDistanceList() Notez que les durées et les distances de la liste sont cumulatives: elles indiquent la durée et la distance de votre position actuelle à chaque point de cheminement, et non d'un point de cheminement à un autre. Désormais, l'objet TimeAndDistance renvoie également delaySeverity. Cette énumération lourde, modérée, légère ou inconnue. Cela correspond à la couleur que vous voir sur l'heure d'arrivée prévue dans l'interface utilisateur de Google Maps (lourd = rouge, moyen = jaune, clair = vert). C'est utile si vous devez créer votre propre pied de page d'ATA.

Pour éviter les fuites de mémoire, vous devez appeler Navigator.removeRemainingTimeOrDistanceChangedListener(listener) lorsque vous n'avez plus besoin de l'écouteur.

L'exemple ci-dessous demande un rappel si le temps restant change de plus de 60 secondes, ou la distance restante change de plus de 100 mètres.

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

Vous pouvez afficher le temps restant et les informations de distance à l'aide de la fonction afficher à l'aide de la méthode setEtaCardEnabled() et en transmettant un paramètre avec la valeur TRUE. Pour supprimer la durée/la distance display, définissez cette valeur sur FALSE.

Vous pouvez également afficher l'heure d'arrivée prévue pour plusieurs points de cheminement à l'aide de getTimeAndDistanceList().

Recevoir des informations sur l'itinéraire

Appelez Navigator.addRouteChangedListener() pour recevoir un rappel lorsque la route change.

Lorsque l'itinéraire change, le SDK Navigation déclenche Rappel onRouteChanged(). Vous pouvez appeler Navigator.getRouteSegments et Navigator.getCurrentRouteSegment() pour trouver le nouveau via un routage réseau.

Pour éviter les fuites de mémoire, vous devez appeler removeRouteChangedListener(listener) lorsque vous n'utilisez n'ont plus besoin de l'écouteur.

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

Détecter quand le mode Nuit change

Appelez NavigationView.addOnNightModeChangedListener ou SupportNavigationFragment.addOnNightModeChangedListener pour recevoir un rappel lorsque le mode Nuit change.

L'exemple suivant montre comment écouter les changements de mode Nuit sur un fragment de navigation.

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