在jetpack compose项目中使用osmdroid

问题描述 投票:0回答:1

大家好,我尝试在我的撰写项目中使用 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"  />
android xml kotlin android-jetpack-compose osmdroid
1个回答
0
投票

开启osmdroid的日志,查看日志。 我猜你没有修改Osmdroid用户代理。默认的UA被拒绝。 将 UA 更改为任何其他字符串并重试。

© www.soinside.com 2019 - 2024. All rights reserved.