You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现RoutePreviewNavigationTemplate时出现参数异常问题求助

RoutePreviewNavigationTemplate 参数异常排查与解决

异常原因

RoutePreviewNavigationTemplate要求列表内的每一行(Row)必须在标题或文本中直接附加DistanceSpan或DurationSpan对象。你当前的代码是将Span对象直接拼接到字符串中,这会导致Span被转成普通字符串(如DistanceSpan@xxxx),系统无法识别出有效的距离/时长Span,从而抛出参数异常。

解决方案

需要使用CarText.Builder来构建包含Span的文本,而非直接字符串拼接。具体修改如下:

修改后的完整代码

class RoutePreviewScreen(carContext: CarContext) : Screen(carContext) {

    @SuppressLint("UnsafeOptInUsageError")
    override fun onGetTemplate(): Template {
        val builder = RoutePreviewNavigationTemplate.Builder()
            .setTitle("Route Details")
            .setHeaderAction(Action.APP_ICON)

        val currentLocation = CarLocation.create(19.269160, -103.754996)

        val locationA = CarLocation.create(19.2689369, -103.7636865)
        val markerA = PlaceMarker.Builder().setColor(CarColor.RED).build()
        val placeA = Place.Builder(locationA).setMarker(markerA).build()

        val distancia = 5
        val duracion = 20

        val distanceSpan = DistanceSpan.create(Distance.create(distancia.toDouble(), Distance.UNIT_KILOMETERS))
        val durationSpan = DurationSpan.create(duracion.toLong())

        // 正确构建包含DistanceSpan的文本
        val distanceText = CarText.Builder()
            .addText("Distance: ")
            .addSpan(distanceSpan)
            .build()

        // 正确构建包含DurationSpan的文本
        val durationText = CarText.Builder()
            .addText("Duration: ")
            .addSpan(durationSpan)
            .build()

        val routeItem = Row.Builder()
            .setTitle(CarText.create("From current to A"))
            .addText(distanceText)
            .addText(durationText)
            .setMetadata(
                Metadata.Builder()
                    .setPlace(placeA)
                    .build()
            )
            .build()

        val itemList = ItemList.Builder()
            .addItem(routeItem)
            .build()

        builder.setItemList(itemList)

        val navigateAction = Action.Builder()
            .setTitle("Iniciar Navegación")
            .setOnClickListener {
                //TODO IMPLEMENT NAVIGATION
            }
            .build()

        builder.setNavigateAction(navigateAction)

        return builder.build()
    }
}

关键说明

  • 使用CarText.Builder的addSpan方法,能将DistanceSpan/DurationSpan正确附加到文本中,让系统识别并验证这些Span的存在,满足RoutePreviewNavigationTemplate的规则。
  • 若列表中有多个行,每一行都需要至少包含距离或时长Span中的一种。

内容的提问来源于stack exchange,提问作者Juan Vazquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:10:15