네이버 지도 (Naver Map)
네이버 지도 SDK를 사용하기 위해서는 네이버 클라우드 플랫폼에서 클라이언트 ID를 발급받고, 발급받은 ID를 SDK에 지정해야 합니다. 아래 페이지에 있는 내용을 따라 네이버 지도 사용 설정을 수행합니다.
1. 의존성 추가
먼저 settings.gradle에 다음과 같이 네이버 지도 SDK가 배포되는 Maven 저장소를 추가합니다.
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url "https://naver.jfrog.io/artifactory/maven/"
}
}
}
그 다음, 네이버 지도를 사용하기 위해서 build.gradle에 Naver Map 라이브러리를 추가합니다.
implementation("com.naver.maps:map-sdk:3.17.0")
2. Manifest에 클라이언트 ID 지정
네이버 지도 API를 사용하기 위해서 발급받은 클라이언트 ID를 Manifest 파일에 지정합니다.
<manifest>
<application>
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="YOUR_CLIENT_ID_HERE" />
</application>
</manifest>
3. 지도 표시
MapFragment 또는 MapView를 사용하여 지도를 표시할 수 있습니다.
- MapFragment
<androidx.fragment.app.FragmentContainerView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.naver.maps.map.MapFragment" />
다음과 같이 FragmentTransaction을 사용해 지도를 화면에 나타낼 수 있습니다.
<FrameLayout
android:id="@+id/container_map"
android:layout_width="match_parent"
android:layout_height="match_parent" />
val fragmentManager = supportFragmentManager
val mapFragment = fragmentManager.findFragmentById(R.id.map) as MapFragment?
?: MapFragment.newInstance().also {
fragmentManager.beginTransaction().add(R.id.container_map, it).commit()
}
- MapView
<com.naver.maps.map.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
MapView를 사용할 때는 반드시 MapView가 포함된 액티비티의 생명 주기에 맞추어 각 상태에 해당하는 함수를 호출해야 합니다. MapFragment를 사용하면 이러한 절차가 필요하지 않으므로 MapFragment를 주로 사용합니다.
다음과 같이 각 생명 주기 함수에 맞추어 MapView를 사용할 수 있습니다.
override fun onStart() {
super.onStart()
mapView.onStart()
}
override fun onResume() {
super.onResume()
mapView.onResume()
}
override fun onPause() {
super.onPause()
mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mapView.onSaveInstanceState(outState)
}
override fun onStop() {
super.onStop()
mapView.onStop()
}
override fun onDestroy() {
super.onDestroy()
mapView.onDestroy()
}
override fun onLowMemory() {
super.onLowMemory()
mapView.onLowMemory()
}
4. NaverMap 객체 얻어오기
MapFragment 및 MapView는 지도에 대한 뷰 역할만을 담당하므로 API를 호출하려면 인터페이스 역할을 하는 NaverMap 객체가 필요합니다.
MapFragment 또는 MapView의 getMapAsync() 메서드로 OnMapReadyCallback을 등록하면 비동기로 NaverMap 객체를 얻을 수 있습니다.
NaverMap 객체가 준비되면 onMapReady() 콜백 메서드가 호출됩니다.
private lateinit var naverMap: NaverMap
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
binding.mapView.onCreate(savedInstanceState)
binding.mapView.getMapAsync(this)
}
override fun onMapReady(mapObject: NaverMap) {
naverMap = mapObject
// 지도 현위치 버튼 활성화
naverMap.uiSettings.isLocationButtonEnabled = true
val position: LatLng = LatLng(37.5666102, 126.9783881)
val zoomLevel: Double = 13.0
// 카메라 즉시 이동
val cameraUpdate = CameraUpdate.scrollTo(position)
naverMap.moveCamera(cameraUpdate)
// 카메라 이동 + 줌 레벨 지정 + 애니메이션 효과
val cameraUpdate = CameraUpdate.scrollAndZoomTo(position, zoomLevel)
.animate(CameraAnimation.Easing)
naverMap.moveCamera(cameraUpdate)
// ...
}
'안드로이드 > 활용' 카테고리의 다른 글
[Android] Moshi로 JSON 파싱하기 (0) | 2023.09.14 |
---|---|
[Android] 구글 지도 사용하기 (0) | 2023.09.14 |
[Android] 앱 위젯 만들기 (0) | 2023.09.12 |
[Android] 현재 위치 정보 가져오기 (0) | 2023.09.08 |
[Android] Firebase 기능 사용하기 (0) | 2023.09.03 |