大家好,我尝试在我的撰写项目中使用 osmdroid,但我不太熟悉 xml,当我运行该应用程序时,它只是一个方格屏幕,UI 中没有地图。我将在下面提供完整的代码
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<org.osmdroid.views.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<androidx.compose.ui.platform.ComposeView
android:id="@+id/composeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
XmlClass 类:ComponentActivity() {
private lateinit var binding: LayoutBinding
override fun onCreate(savedInstanceState: Bundle?) {
lateinit var map: MapView
super.onCreate(savedInstanceState)
binding = LayoutBinding.inflate(layoutInflater)
val view = binding.root
getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this))
setContentView(view)
val mapController = map.controller
mapController.setZoom(9.5) //32.627387981943, 51.62582233021288
val startPoint = GeoPoint(32.627387981943, 51.62582233021288)
mapController.setCenter(startPoint)
binding.map.setTileSource(TileSourceFactory.MAPNIK) //DEFAULT_TILE_SOURCE
binding.composeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
val context = LocalContext.current
val navController = NavHostController(context)
MapCarScreen(navController)
}
}
}
}
@可组合 有趣的 MapCarScreen(navController: NavHostController) {
//val context = LocalContext.current
Box(modifier = Modifier.fillMaxSize()) {
AndroidView(
factory = { context ->
val mapView = MapView(context)
mapView
},
modifier = Modifier.fillMaxSize()
) { mapView ->
// Use the mapView instance as needed
}
}
}
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
开启osmdroid的日志,查看日志。 我猜你没有修改Osmdroid用户代理。默认的UA被拒绝。 将 UA 更改为任何其他字符串并重试。