Jetpack Compose集成Mapbox时Access Token配置异常求助
你按Mapbox官方文档完成配置后,仍遇到以下错误:
com.mapbox.maps.MapboxConfigurationException: Using MapView, MapSurface, Snapshotter or other Map components requires providing a valid access token when inflating or creating the map. Provide the token by either: 1. Creating a mapbox_access_token string resource. 2. Or programmatically calling
MapboxOptions.accessToken = <your_access_token>. The access token parameter is required when using a Mapbox service.
以下是三种有效解决方式:
1. 通过字符串资源配置
在res/values/strings.xml文件中添加访问令牌:
<string name="mapbox_access_token">你的Mapbox访问令牌</string>
Mapbox会自动读取这个资源,无需额外代码配置。
2. 代码中全局设置MapboxOptions.accessToken
可以在应用启动时全局配置,比如自定义Application类:
class MyApp : Application() { override fun onCreate() { super.onCreate() MapboxOptions.accessToken = "你的Mapbox访问令牌" } }
记得在AndroidManifest.xml中指定这个Application:
<application android:name=".MyApp" <!-- 其他配置项 --> > </application>
也可以在MapboxMap组件初始化前直接设置:
// 在MapboxMap调用前添加 MapboxOptions.accessToken = "你的Mapbox访问令牌" MapboxMap( modifier = Modifier.fillMaxSize(), mapInitOptionsFactory = { context -> MapInitOptions( context = context, styleUri = Style.SATELLITE_STREETS, ) }, mapViewportState = MapViewportState().apply { setCameraOptions { zoom(2.0) center(Point.fromLngLat(-98.0, 39.5)) pitch(0.0) bearing(0.0) } }, )
3. 在MapInitOptions中直接传入令牌
修改你的Composable代码,在MapInitOptions里添加accessToken参数:
MapboxMap( modifier = Modifier.fillMaxSize(), mapInitOptionsFactory = { context -> MapInitOptions( context = context, styleUri = Style.SATELLITE_STREETS, accessToken = "你的Mapbox访问令牌" // 新增此行 ) }, mapViewportState = MapViewportState().apply { setCameraOptions { zoom(2.0) center(Point.fromLngLat(-98.0, 39.5)) pitch(0.0) bearing(0.0) } }, )
注意事项
- 确认你的访问令牌是在Mapbox控制台生成的有效令牌,且具备Maps SDK的使用权限
gradle.properties中的MAPBOX_DOWNLOADS_TOKEN是用于下载SDK的令牌,和地图访问令牌不是同一个,不要混淆
内容的提问来源于stack exchange,提问作者Muhammad Muddassar

