Code: Select all
@SuppressLint("MissingPermission")
private fun startNavigationWithRouteToken(originLat: Double, originLng: Double) {
val token = routeTokenArg ?: return toast("Missing route token")
if (!::navigator.isInitialized) return toast("Navigator not ready yet")
if (!mLocationPermissionGranted) return toast("Location permission required")
val destLat = destLatArg ?: return toast("Missing destination lat")
val destLng = destLngArg ?: return toast("Missing destination lng")
val currentLatLng = getCurrentDeviceLatLng()
val isNearOrigin = currentLatLng != null && metersBetween(
currentLatLng.latitude, currentLatLng.longitude,
originLat, originLng
) < 100 // Example threshold: 100 meters
if (isNearOrigin) {
// User is close to the route's original start. Redeem the token.
Log.d(TAG, "User is near origin. Attempting to redeem route token.")
val originWp = Waypoint.Builder().setLatLng(originLat, originLng).build()
val destWp = Waypoint.Builder().setLatLng(destLat, destLng).build()
val custom = CustomRoutesOptions.builder()
.setRouteToken(token)
.setTravelMode(CustomRoutesOptions.TravelMode.DRIVING)
.build()
navigator.setDestinations(listOf(originWp, destWp), custom)
.setOnResultListener { code ->
if (code == Navigator.RouteStatus.OK) {
Log.d(TAG, "Token redemption successful. Starting guidance.")
navigator.setAudioGuidance(Navigator.AudioGuidance.VOICE_ALERTS_AND_GUIDANCE)
navigator.startGuidance()
} else {
Log.e(TAG, "Token redemption failed ($code). Falling back to live route.")
toast("Failed to use preferred route. Starting live navigation.")
}
}
} else {
// User is NOT near the origin. Don't use the token;
Log.d(TAG, "User is not near origin. Starting live navigation without token.")
toast("Starting live navigation from current location.")
}
}
Der Benutzer ist nahezu Ursprung. Versuch, Routenmotive einzubeziehen. < /P>
Token Erlösung erfolgreich. Guidance. /> Verwenden Sie die Routetoken auf der alternativen Route mit SetDestinations (..., CustomRoutesoptions). Dies zwingt den Weg grob, aber ich mag diese Lösung nicht - es ist spröde, erreicht Wegpunktgrenzen und besiegt den Zweck der Verwendung von Routenmarken. Herkunft? Oder sollte ich bei Verwendung eines RoutEToken nur den Wegpunkt des Ziels übergeben (d. H. Der Ursprung kommt von aktuellem GPS und darf nicht als Wegpunkt geliefert werden)? /> 3.) Wenn ich die alternative Route erzwingen möchte, die ich ausgewählt habe (nicht am schnellsten), wie können Sie dies mit Navigation SDK tun?>