Maps Android KTX

์ง€๋„ Android Kotlin ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ(KTX)์€ Android์šฉ Maps SDK์™€ Android์šฉ Maps SDK ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ Kotlin ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ์ด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” Android์šฉ Maps SDK ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด Kotlin์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Kotlin ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ง€๋„ KTX๋Š” ์˜คํ”ˆ์†Œ์Šค๋กœ ์ œ๊ณต๋˜๋ฉฐ GitHub์—์„œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์„ค์น˜

Android์šฉ Maps SDK๋ฅผ ์œ„ํ•œ KTX ๋ฐ Android์šฉ Maps SDK ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ KTX(์„ ํƒ์‚ฌํ•ญ)๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด build.gradle ํŒŒ์ผ์— ๋‹ค์Œ ์ข…์† ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

dependencies {

    // KTX for the Maps SDK for Android library
    implementation 'com.google.maps.android:maps-ktx:5.0.0'
}

์‚ฌ์šฉ ์˜ˆ:

KTX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋Šฅ, ์ด๋ฆ„์ด ์ง€์ •๋œ ๋งค๊ฐœ๋ณ€์ˆ˜, ๊ธฐ๋ณธ ์ธ์ˆ˜, ๋น„๊ตฌ์กฐํ™” ์„ ์–ธ, ์ฝ”๋ฃจํ‹ด ๋“ฑ์˜ ์—ฌ๋Ÿฌ Kotlin ์–ธ์–ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ GoogleMap ๊ฒ€์ƒ‰

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ GoogleMap์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

lifecycleScope.launch {
  lifecycle.repeatOnLifecycle(Lifecycle.State.CREATED) {
    val mapFragment: SupportMapFragment? =
      supportFragmentManager.findFragmentById(R.id.map) as? SupportMapFragment
    val googleMap: GoogleMap? = mapFragment?.awaitMap()
  }
}

๋งˆ์ปค ์ถ”๊ฐ€

DSL ์Šคํƒ€์ผ ๋ฉ”์„œ๋“œ addMarker()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์ปค๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

val sydney = LatLng(-33.852, 151.211)
val marker = googleMap.addMarker {
  position(sydney)
  title("Marker in Sydney")
}

์นด๋ฉ”๋ผ ์ด๋ฒคํŠธ ์ˆ˜์ง‘

์นด๋ฉ”๋ผ ์ด๋™๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๋Š” Kotlin Flow๋ฅผ ํ†ตํ•ด ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

lifecycleScope.launch {
  lifecycle.repeatOnLifecycle(Lifecycle.State.CREATED) {
    googleMap.cameraMoveEvents().collect {
      print("Received camera move event")
    }
  }
}

์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์ „์ฒด ๋ชฉ๋ก์€ ์ฐธ์กฐ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์šฉ GitHub ์ €์žฅ์†Œ์—๋Š” ์ž์ฒด ์•ฑ์—์„œ Maps KTX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•ด๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. GitHub์—์„œ ZIP ํŒŒ์ผ์„ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. Android ์ŠคํŠœ๋””์˜ค์—์„œ ํŒŒ์ผ -> ์—ด๊ธฐ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐฉ๊ธˆ ๋ณต์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค์šด๋กœ๋“œํ•œ ํด๋”๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  3. ๋ฐ๋ชจ ์•ฑ์— API ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    1. Android์šฉ Maps SDK ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    2. ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ secrets.properties๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. API ํ‚ค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์ด ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ์ œ์–ดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
    3. ์ด ํ•œ ์ค„์„ secrets.properties์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
      MAPS_API_KEY="YOUR_API_KEY"
      ์—ฌ๊ธฐ์„œ YOUR_API_KEY๋Š” ์ฒซ ๋‹จ๊ณ„์—์„œ ํš๋“ํ•œ ์‹ค์ œ API ํ‚ค์ž…๋‹ˆ๋‹ค. secrets.defaults.properties๋ฅผ ์˜ˆ๋กœ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์‹คํ–‰ ๊ตฌ์„ฑ์—์„œ app-ktx ๋ชจ๋“ˆ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. 'app-ktx' ์‹คํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

Google Maps Platform์šฉ ๋‹ค๋ฅธ Kotlin ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Android์šฉ Maps SDK ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ KTX
  • Android์šฉ Places SDK๋ฅผ ์œ„ํ•œ KTX