SW개발/kotlin

[kotlin] 네이버 지도 SDK 사용하기 (2)

코대장 2021. 1. 6. 02:44
반응형
네이버 지도상에 현재 내 위치를 나타내보자.

1. 의존성 추가

build.gradle(Module: app)

    // Google Play Service
    implementation("com.google.android.gms:play-services-location:17.1.0")

2. 지도 뷰, 인터페이스 객체 얻기

class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    var TAG:String = "로그"

    private lateinit var locationSource: FusedLocationSource
    private lateinit var naverMap: NaverMap

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

        // 뷰 역할을 하는 프래그먼트 객체 얻기
        val fm = supportFragmentManager
        val mapFragment = fm.findFragmentById(R.id.map_fragment) as MapFragment?
            ?: MapFragment.newInstance().also {
                fm.beginTransaction().add(R.id.map_fragment, it).commit()
            }

        // 인터페이스 역할을 하는 NaverMap 객체 얻기
        // 프래그먼트(MapFragment)의 getMapAsync() 메서드로 OnMapReadyCallback 을 등록하면 비동기로 NaverMap 객체를 얻을 수 있다고 한다.
        // NaverMap 객체가 준비되면 OnMapReady() 콜백 메서드 호출
        mapFragment.getMapAsync(this)

        locationSource = FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE)
    }

    override fun onMapReady(naverMap: NaverMap) {
        Log.d(TAG, "MainActivity - onMapReady")
        this.naverMap = naverMap
        naverMap.locationSource = locationSource
        naverMap.uiSettings.isLocationButtonEnabled = true
    }

    override fun onRequestPermissionsResult(requestCode: Int,
                                            permissions: Array<String>,
                                            grantResults: IntArray) {
        Log.d(TAG, "MainActivity - onRequestPermissionsResult")
        if (locationSource.onRequestPermissionsResult(requestCode, permissions,
                grantResults)) {
            if (!locationSource.isActivated) { // 권한 거부됨
                Log.d(TAG, "MainActivity - onRequestPermissionsResult 권한 거부됨")
                naverMap.locationTrackingMode = LocationTrackingMode.None
            } else {
                Log.d(TAG, "MainActivity - onRequestPermissionsResult 권한 승인됨")
                naverMap.locationTrackingMode = LocationTrackingMode.Follow // 현위치 버튼 컨트롤 활성
            }
            return
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    companion object {
        private const val LOCATION_PERMISSION_REQUEST_CODE = 1000
    }

}

3. 코드실행

지도와 좌측하단 버튼 컨트롤이 생겼다.

참고로 애뮬레이터 상에서 모바일 현재 위치(GPS 위,경도)를 설정해 줄 수 있는데

빨강색 박스 클릭하면 창이 하나 뜨는데 여기서 현재 위치를 조정해 줄 수 있는것이다.

지도 위에 마우스를 클릭 후 "SET LOCATION" 클릭하면 된다.

 

참고자료

네이버 지도 SDK 시작하기 : navermaps.github.io/android-map-sdk/guide-ko/1.html

'SW개발 > kotlin' 카테고리의 다른 글

[kotlin] 네이버 지도 SDK 사용하기 (1)  (0) 2021.01.02
[kotlin] 날짜 구하기  (0) 2020.12.08