using osmdroid in a jetpack compose project

122 views Asked by At

hello everyone im trying to use osmdroid in my compose project and im not really familiar with xml,when i run the app its just a checkered screen and no map in UI. i will provide the whole code down below

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

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" />

class 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)
        }
    }
}

}

@Composable fun 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"  />
1

There are 1 answers

0
Null On

Enable the log of osmdroid,check the log. I guess you don't modify the Osmdroid user-agent.The default UA is denied. Change the UA to any other string and retry.