Android

[Android] Naver Map Api로 네이버 지도 사용하기

실버☆ 2022. 4. 7. 15:51

 

1. 세팅하기

 

gradle 파일에 네이버 지도 SDK 저장소 설정을 추가해준다. 나는 안드로이드 스튜디오 Arctic Fox 버전을 쓰고 있기 때문에 setting.gradle 파일에 해당 설정을 해주었다.

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://naver.jfrog.io/artifactory/maven/'
        }
    }
}

 

네이버 지도 SDK에 대한 의존성도 추가해준다. (build.gradle/app)

dependencies {
    // 네이버 지도 SDK
    implementation 'com.naver.maps:map-sdk:3.14.0'
}

 

네이버 클라우드 플랫폼에서 애플리케이션을 새로 생성하면 클라이언트 ID를 발급받게 되는데, 이 ID를 Manifast 파일에 지정해 준다.

클라이언트 ID는 콘솔 > AI/NAVER API > Application > 인증정보 에서 확인할 수 있다.

<manifest>
    <application>
        <meta-data
            android:name="com.naver.maps.map.CLIENT_ID"
            android:value="${Client ID}" />
    </application>
</manifest>

이 클라이언트 인증정보를 설정해 주지 않으면 네이버 지도가 화면에 뜨지 않는다.

 

 

 

1. 지도 표시하기

 

xml 파일에 직접 MapView를 넣어주었다. fragment 방식을 사용해 지도를 표시할 수도 있다.

<com.naver.maps.map.MapView
    android:id="@+id/map_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

 

이 과정까지 완료한 후 애뮬레이터를 실행해 보면 네이버 지도가 잘 뜨는 것을 볼 수 있다.

 

 

 

추가로 액티비티 라이프 사이클에 맞추어 생명주기 함수들을 그때 그때 호출해 주는 코드를 작성해야 한다. 지도를 사용할 때 액티비티에 MapView를 사용했으므로 이 과정을 거치지 않으면 지도가 제대로 작동하지 않을 수 있다. 프래그먼트에서 MapView를 사용했다면 마찬가지로 프래그먼트의 생명주기에 맞춰준다.

 

class MainActivity : AppCompatActivity() {
    private lateinit var mapView: MapView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mapView = findViewById(R.id.map_view)
        mapView.onCreate(savedInstanceState)
    }

    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 onDestroyView() {
        super.onDestroy()
        mapView.onDestroy()
    }

    override fun onLowMemory() {
        super.onLowMemory()
        mapView.onLowMemory()
    }
}