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

如何在Kotlin的Jetpack Compose中使用MapMyIndia实现逐向导航?

在Jetpack Compose中实现MapMyIndia Turn-By-Turn导航

MapMyIndia目前没有官方Jetpack Compose专属组件,可通过Android View互操作的方式集成导航功能,具体步骤如下:

    1. 配置依赖与权限
      在Module级别的build.gradle中添加导航相关依赖:
    dependencies {
        // MapMyIndia核心地图SDK
        implementation 'com.mapmyindia.sdk:maps:10.0.0'
        // 导航SDK
        implementation 'com.mapmyindia.sdk:navigation:6.0.0'
        // 位置服务(用于定位起点)
        implementation 'com.mapmyindia.sdk:location:1.0.0'
    }
    

    同时在AndroidManifest.xml中声明必要权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Android 10+ 需后台定位权限 -->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    

    别忘了配置MapMyIndia API密钥:

    <meta-data
        android:name="com.mapmyindia.sdk.api.key"
        android:value="你的API密钥" />
    
    1. 嵌入导航View到Compose布局
      使用AndroidView组件将MapMyIndia导航视图嵌入Compose:
    @Composable
    fun MapMyIndiaNavView() {
        AndroidView(
            factory = { context ->
                val navView = MapMyIndiaNavigationView(context)
                // 配置起点、终点坐标
                val origin = LatLng(28.551087, 77.267304)
                val destination = LatLng(28.612912, 77.229536)
                
                val navOptions = NavigationOptions.Builder()
                    .setOrigin(origin)
                    .setDestination(destination)
                    .build()
                
                navView.startNavigation(navOptions)
                navView
            },
            update = { /* 后续更新逻辑(可选) */ }
        )
    }
    
    1. 监听导航事件
      通过设置导航监听器,获取转弯提示、到达终点等状态,可同步到Compose UI:
    // 在factory代码块中添加监听器
    navView.setNavigationListener(object : NavigationListener {
        override fun onTurnByTurnInstruction(instruction: TurnByTurnInstruction) {
            // 获取转弯提示文本,可通过StateFlow或mutableState传递给Compose组件展示
            val turnHint = instruction.instruction
        }
    
        override fun onDestinationReached() {
            // 到达终点逻辑
        }
    
        override fun onNavigationStarted() {}
        override fun onNavigationCancelled() {}
        override fun onNavigationError(error: NavigationError) {}
    })
    
    1. 结合Compose状态管理控制导航
      用Compose的状态变量实现启动/停止导航的控制:
    @Composable
    fun NavControlPanel() {
        val isNavigating = remember { mutableStateOf(false) }
        val navViewRef = remember { mutableStateOf<MapMyIndiaNavigationView?>(null) }
    
        Column {
            Button(onClick = {
                if (isNavigating.value) {
                    navViewRef.value?.stopNavigation()
                } else {
                    val origin = LatLng(28.551087, 77.267304)
                    val destination = LatLng(28.612912, 77.229536)
                    val options = NavigationOptions.Builder()
                        .setOrigin(origin)
                        .setDestination(destination)
                        .build()
                    navViewRef.value?.startNavigation(options)
                }
                isNavigating.value = !isNavigating.value
            }) {
                Text(if (isNavigating.value) "停止导航" else "启动导航")
            }
    
            AndroidView(
                factory = { context ->
                    val view = MapMyIndiaNavigationView(context)
                    navViewRef.value = view
                    view
                }
            )
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:52:35