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

如何在Jetpack Compose中集成地图SDK导航功能?

在Jetpack Compose中使用导航SDK实现应用内路线导航

问题描述

我需要在应用内直接生成前往目标地点的路线,无需调用其他内置应用。此前我使用Route API来生成并更新路线,但了解到现在可以更直接地使用导航SDK。想咨询是否有开发者使用过该SDK,并希望了解能否在Jetpack Compose中实现该功能。

当前项目依赖

dependencies {
implementation ("org.jetbrains.kotlin:kotlin-stdlib:2.0.21")
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
implementation("androidx.activity:activity-compose:1.9.3")
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
implementation("androidx.compose.ui:ui:1.7.6")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview:1.7.6")
implementation("androidx.compose.material3:material3:1.4.0-alpha05")
implementation("androidx.compose.material:material:1.7.6")
//kapt ("androidx.compose.compiler:compiler:2.0.0")

testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")

implementation ("androidx.appcompat:appcompat:1.7.0")
implementation ("androidx.navigation:navigation-compose:2.8.5")
implementation ("androidx.constraintlayout:constraintlayout-compose:1.1.0")
implementation("androidx.compose.material:material-icons-core:1.7.6")
implementation( "androidx.compose.material:material-icons-extended:1.7.6")
implementation("androidx.compose.material:material:1.8.0-alpha07")
implementation("androidx.compose.animation:animation:1.8.0-alpha07")

implementation ("androidx.compose.foundation:foundation:1.7.6")
implementation ("com.google.accompanist:accompanist-permissions:0.33.2-alpha")
implementation ("com.google.accompanist:accompanist-pager:0.33.2-alpha")
implementation ("io.coil-kt:coil-compose:2.5.0")
implementation("com.google.accompanist:accompanist-pager-indicators:0.33.2-alpha")
implementation("com.google.accompanist:accompanist-systemuicontroller:0.33.2-alpha")
implementation("com.flaviofaria:kenburnsview:1.0.7")
implementation ("androidx.core:core-splashscreen:1.0.1")
//implementation ("com.github.togisoft:jetpack_compose_country_code_picker:1.1.4")
implementation ("com.googlecode.libphonenumber:libphonenumber:8.13.52")
//implementation("com.github.togisoft:ccp:1.")

implementation(platform("com.google.firebase:firebase-bom:32.6.0"))
implementation("com.google.firebase:firebase-analytics")
//implementation("com.google.firebase:firebase-auth-ktx")
implementation("com.google.firebase:firebase-messaging-ktx")

// [START gradle_firebase_ui_auth]
implementation("com.firebaseui:firebase-ui-auth:8.0.2")

implementation("com.jakewharton.timber:timber:5.0.1")
implementation("androidx.compose.animation:animation-graphics")
implementation("androidx.media3:media3-exoplayer:1.5.1")
//ui
implementation("androidx.media3:media3-ui:1.5.1")

//maps
implementation("com.google.android.gms:play-services-auth:21.3.0")
implementation("com.google.android.gms:play-services-auth-api-phone:18.1.0")
implementation ("com.google.android.libraries.maps:maps:3.1.0-beta")

implementation ("com.google.android.gms:play-services-location:21.3.0")
implementation("com.google.maps.android:maps-compose:6.4.0")
implementation("com.google.android.gms:play-services-maps:19.1.0")
implementation("com.google.maps.android:android-maps-utils:2.3.0")


implementation("com.google.android.libraries.places:places:4.1.0")
implementation ("com.google.dagger:hilt-android:2.51.1")
implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
implementation ("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
kapt("com.google.dagger:hilt-compiler:2.51.1")

implementation ("com.android.volley:volley:1.2.1")

implementation ("com.google.code.gson:gson:2.10.1")
implementation ("com.github.composeuisuite:ohteepee:1.0.3")
implementation ("com.github.Muratthekus:Compose-CurrencyText:1.0")

implementation ("com.google.api-client:google-api-client:2.0.0")

implementation("com.google.auth:google-auth-library-oauth2-http:1.19.0")
implementation ("com.squareup.retrofit2:retrofit:2.11.0")
implementation ("com.squareup.retrofit2:converter-gson:2.11.0")
implementation("com.karumi:dexter:6.2.3")
implementation ("androidx.work:work-runtime-ktx:2.10.0")
implementation("org.greenrobot:eventbus:3.3.1")
implementation ("com.github.bumptech.glide:compose:1.0.0-alpha.1")
implementation ("com.github.DogusTeknoloji:compose-date-picker:1.1.0")
}

解答

  • 完全可以在Jetpack Compose中实现导航SDK的集成,以Google Maps Navigation SDK为例,它支持在应用内嵌入完整的导航流程,无需跳转第三方地图应用。
  • 补充依赖:你当前的依赖已经包含了Maps Compose相关库,还需要添加导航SDK的核心依赖:
    implementation("com.google.android.libraries.navigation:navigation:2.7.0")
    implementation("com.google.android.libraries.navigation:navigation-ui:2.7.0")
    
  • 核心实现步骤:
    1. 通过Places API或者经纬度坐标获取起点(当前位置)和终点的位置数据。
    2. 在Compose中使用AndroidView包裹导航视图(因为导航SDK目前基于View体系,需要通过该组件嵌入Compose界面)。
    3. 配置导航参数,比如路线偏好(最快/最短路线、避开高速等)、语音播报设置,然后启动导航会话,即可在应用内实时显示路线和导航指引。
  • 关键注意事项:
    • 需在Google Cloud Console启用Navigation API,并配置好有效的API密钥。
    • 必须申请位置权限(ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION),确保能获取当前位置作为导航起点。
    • 嵌入导航视图时要绑定好生命周期,避免内存泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:27:32