개요
이 튜토리얼에서는 Android의 위치 API(Location API)와 Google Maps SDK를 활용해 Kotlin으로 현재 위치를 지도에 표시하고 추적하는 방법을 단계별로 알아봅니다. 예제에서는 SupportMapFragment를 사용해 지도를 화면에 띄우고, 특정 좌표에 마커(Marker)를 추가한 뒤 카메라를 해당 위치로 이동시키는 과정을 다룹니다.
1단계: 새 프로젝트 생성
Android Studio를 실행한 후 File → New Project 메뉴로 이동하여 새 프로젝트를 생성합니다. 이때 프로젝트 이름, 패키지명, 최소 SDK 버전 등 필수 항목을 모두 입력합니다. 지도 기능을 사용하려면 Google Maps Views Activity 템플릿을 선택하는 것이 편리합니다.
2단계: 레이아웃 파일 작성
res/layout/activity_maps.xml 파일에 아래 코드를 추가합니다. 전체 화면을 차지하는 SupportMapFragment를 배치하여 지도를 표시할 준비를 합니다.
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity" />
3단계: MapsActivity.kt 작성
src/MapsActivity.kt 파일에 다음 코드를 추가합니다. OnMapReadyCallback 인터페이스를 구현하여 지도가 준비되면 콜백을 통해 GoogleMap 객체를 받아옵니다.
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.google.android.gms.maps.model.MarkerOptions
class MapsActivity : AppCompatActivity(), OnMapReadyCallback {
private lateinit var mMap: GoogleMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
// SupportMapFragment를 가져오고, 지도가 사용 가능해지면 알림을 받습니다.
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
}
override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
val myCurrentLocation = LatLng(13.0827, 80.2707)
mMap.addMarker(
MarkerOptions().position(myCurrentLocation)
.title("This is My current Location")
)
mMap.moveCamera(CameraUpdateFactory.newLatLng(myCurrentLocation))
}
}
코드 설명:
- getMapAsync(this): 지도가 비동기 방식으로 초기화되며, 완료되면 onMapReady() 콜백이 호출됩니다.
- LatLng(13.0827, 80.2707): 위도와 경도 값으로 위치를 지정합니다. 여기서는 첸나이(Chennai) 좌표를 예시로 사용했으며, 실제 현재 위치로 바꾸려면 FusedLocationProviderClient 등을 활용해 실시간 좌표를 가져올 수 있습니다.
- addMarker(): 지정한 위치에 마커를 추가하고 제목을 표시합니다.
- moveCamera(): 지도 카메라를 해당 위치로 이동시켜 화면 중앙에 보여줍니다.
4단계: AndroidManifest.xml 설정
androidManifest.xml 파일에 정확한 위치 접근 권한(ACCESS_FINE_LOCATION)과 Google Maps API 키를 추가합니다. API 키는 Google Cloud Console에서 발급받을 수 있으며, 반드시 본인의 유효한 키를 사용해야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY" />
</application>
</manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 결과를 확인해 보겠습니다. 실제 Android 스마트폰을 컴퓨터에 USB로 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭합니다. 실행 옵션 목록에서 연결된 모바일 기기를 선택하면, 잠시 후 기본 화면과 함께 지도가 표시되고 지정한 좌표 위치에 마커가 나타나는 것을 확인할 수 있습니다.

마무리
지금까지 Kotlin과 Google Maps 위치 API를 사용해 Android 앱에서 현재 위치를 지도에 표시하는 기본적인 방법을 살펴보았습니다. 실제 서비스에 적용하려면 런타임 권한 요청 처리, FusedLocationProviderClient를 통한 실시간 위치 업데이트 수신, 위치 변경 시 마커 갱신 로직 등을 추가로 구현하면 더욱 완성도 높은 위치 기반 앱을 만들 수 있습니다.