Here I gave simple example of loading google maps in android app. Now I want to load KML file which is on my web site, using simple HttpURLConnection.

First I will add a button for load KML, in order to have clear example, so my layout looks like:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/btnLoadKml"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load KML"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginBottom="32dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

In gradle "\GoogleMapsTestSandBox\app\build.gradle.kts" add dependency:
implementation("com.google.maps.android:android-maps-utils:3.19.0")
Now, setup view binding as I already explained here, MainActivity I will inherit from OnMapReadyCallback, so now it looks like:
package com.milosev.googlemapstestsandbox

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.milosev.googlemapstestsandbox.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    private lateinit var binding: ActivityMainBinding
    private lateinit var map: GoogleMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)

        binding.btnLoadKml.setOnClickListener {
        }
    }

    override fun onMapReady(googleMap: GoogleMap) {
        map = googleMap

        val tunis = LatLng(36.8065, 10.1815)
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(tunis, 8f))
    }
}
setOnClickListener is empty, here I will add:
val loadKml = LoadKml()
loadKml.execute(this, map)
Since my KML is too big, I had to extend timeouts, and first I am saving in into temp file, so class LoadKml will look like this:
package com.milosev.googlemapstestsandbox

import android.content.Context
import android.widget.Toast
import com.google.android.gms.maps.GoogleMap
import com.google.maps.android.data.kml.KmlLayer
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
import java.io.FileInputStream
import java.net.URL

class LoadKml {
    fun execute(activity: Context, map: GoogleMap) {

        CoroutineScope(Dispatchers.IO).launch {
            try {
                val url =
                    URL("https://www.milosev.com/gallery/allWithPics/travelBuddies/tunis/kml/kml.kml")
                val connection = url.openConnection()
                connection.connectTimeout = 15000
                connection.readTimeout = 60000

                val tempFile = File(activity.cacheDir, "temp.kml")
                connection.getInputStream().use { input ->
                    tempFile.outputStream().use { output ->
                        input.copyTo(output)
                    }
                }

                withContext(Dispatchers.Main) {
                    val layer = KmlLayer(map, FileInputStream(tempFile), activity)
                    layer.addLayerToMap()
                    Toast.makeText(activity, "KML Loaded", Toast.LENGTH_LONG).show()
                }
            } catch (e: Exception) {
                withContext(Dispatchers.Main) {
                    Toast.makeText(activity, "Error: ${e.message}", Toast.LENGTH_LONG).show()
                }
            }
        }

    }
}
Part:
val tempFile = File(activity.cacheDir, "temp.kml")
connection.getInputStream().use { input ->
	tempFile.outputStream().use { output ->
		input.copyTo(output)
	}
}
is maybe not needed, I was testing of loading big KML files.

Example download from here.