我正在使用mapbox sdk导航v2并且骑行视图有问题

问题描述 投票:0回答:1

我正在尝试将骑行配置文件应用到导航中,我是这样做的:

    private fun requestRoutes(origin: Point, destination: Point) {
        MapboxNavigationApp.current()!!.requestRoutes(
            routeOptions = RouteOptions
                .builder()
                .applyDefaultNavigationOptions()
                .applyLanguageAndVoiceUnitOptions(this)
                .coordinatesList(listOf(origin, destination))
                .alternatives(true)
                .profile(DirectionsCriteria.PROFILE_CYCLING)
                .build(),
            callback = object : NavigationRouterCallback {
                override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) {
                    // no impl
                }

                override fun onFailure(reasons: List<RouterFailure>, routeOptions: RouteOptions) {
                    // no impl
                }

                override fun onRoutesReady(routes: List<NavigationRoute>, routerOrigin: RouterOrigin) {
                    binding.navigationView.api.startActiveGuidance(routes)
                    // binding.navigationView.api.routeReplayEnabled(true) simulate movement
                }
            }
        )
    }

这是我的 onCreate 函数:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // set the layout
        binding = MapboxActivityNavigationViewBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // get the arg of the js
        val routes = intent.getSerializableExtra("routes") as String
        val arrayList = JSONArray(routes);
        val originCoord = arrayList.getJSONObject(0)
        val destinationCoord = arrayList.getJSONObject(1)
        MapboxNavigationApp.current()?.registerLocationObserver(locationObserver)
        val origin = Point.fromLngLat(originCoord.getDouble("longitude"), originCoord.getDouble("latitude"))
        val destination = Point.fromLngLat(destinationCoord.getDouble("longitude"), destinationCoord.getDouble("latitude"))
        origing = origin
        destinationg = destination

        // set the custom view binder
        val navigationActivity = this
        findViewById<NavigationView>(R.id.navigationView).customizeViewBinders {
            infoPanelEndNavigationButtonBinder = MyinfoPanelEndNavigationButtonBinder(navigationActivity)
        }

        // launch the active guidance
        requestRoutes(origin, destination)
    }

不幸的是,当将配置文件设置为骑行时,导航不会启动,并且保持自由驾驶模式,在其他配置文件(驾驶、步行)中一切正常,这是 sdk 的错误还是我做错了什么?

我在文档或互联网上找不到任何帮助

android sdk navigation mapbox
1个回答
0
投票

我想通了,伙计们,在我的

requestRoutes
功能中,我有这些路线选项。

routeOptions = RouteOptions
                .builder()
                .applyDefaultNavigationOptions()
                .applyLanguageAndVoiceUnitOptions(this)
                .coordinatesList(listOf(origin, destination))
                .alternatives(true)
                .profile(DirectionsCriteria.PROFILE_CYCLING)
                .build(),

原来

applyDefaultNavigationOptions()
是这样实现的:

fun RouteOptions.Builder.applyDefaultNavigationOptions(
    @DirectionsCriteria.ProfileCriteria profile: String =
        DirectionsCriteria.PROFILE_DRIVING_TRAFFIC
): RouteOptions.Builder = apply {
    val defaultAnnotations = listOf(
        DirectionsCriteria.ANNOTATION_SPEED,
        DirectionsCriteria.ANNOTATION_DURATION,
        DirectionsCriteria.ANNOTATION_DISTANCE,
    )

    when (profile) {
        DirectionsCriteria.PROFILE_DRIVING_TRAFFIC -> {
            annotationsList(
                mutableListOf(
                    DirectionsCriteria.ANNOTATION_CONGESTION_NUMERIC,
                    DirectionsCriteria.ANNOTATION_MAXSPEED,
                    DirectionsCriteria.ANNOTATION_CLOSURE,
                ).apply { addAll(defaultAnnotations) }
            )
            continueStraight(true)
            enableRefresh(true)
        }
        DirectionsCriteria.PROFILE_DRIVING -> {
            annotationsList(
                mutableListOf(
                    DirectionsCriteria.ANNOTATION_MAXSPEED,
                ).apply { addAll(defaultAnnotations) }
            )
            continueStraight(true)
            enableRefresh(false)
        }
        DirectionsCriteria.PROFILE_CYCLING,
        DirectionsCriteria.PROFILE_WALKING -> {
            annotationsList(defaultAnnotations)
            continueStraight(false)
            enableRefresh(false)
        }
        else -> throw IllegalArgumentException(
            "Unknown profile [$profile]. It must be one [DirectionsCriteria.ProfileCriteria]"
        )
    }

所以我覆盖了配置文件,因为它已经在此函数中设置了。不知道为什么覆盖配置文件对于步行和驾驶配置文件不是问题,但对于骑行配置文件不是问题,但您可以通过在

applyDefaultNavigationOptions()
函数中传递配置文件来解决此问题,如下所示:

routeOptions = RouteOptions
                .builder()
                .applyDefaultNavigationOptions(DirectionsCriteria.PROFILE_CYCLING)
                .applyLanguageAndVoiceUnitOptions(this)
                .coordinatesList(listOf(origin, destination))
                .alternatives(true)
                .build(),
© www.soinside.com 2019 - 2024. All rights reserved.