Cute Apple
본문 바로가기
개발/Android

[Android] Naver Map 현재 위치 활성화

by 미댕댕 2022. 8. 18.

미니 프로젝트를 진행하는 중에 NaverMap 에 현재 위치를 표기하고 싶어서 공부를 해 보았다.

 

 

0-1. Gradle

    // 네이버 지도 SDK
    implementation 'com.naver.maps:map-sdk:3.15.0'
	// 현재 위치를 가져오기 위한 google 서비스
    implementation 'com.google.android.gms:play-services-location:20.0.0'

 

0-2 Manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

 

1. MainActivity.kt

  • OnMapReadyCallback 을 상속받음으로서 onMapReady 를 오버라이딩하여 사용할 수 있다.
class MainActivity : AppCompatActivity(), OnMapReadyCallback {

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

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.mapView.onCreate(savedInstanceState)
        binding.mapView.getMapAsync(this)


    }
    
    override fun onMapReady(map: NaverMap) {
        naverMap = map

        naverMap.maxZoom = 18.0
        naverMap.minZoom = 10.0

		//카메라 위치 업데이트 (강남역 )
        val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.498095, 127.027610))
        naverMap.moveCamera(cameraUpdate)

        //현재 위치 UI 셋팅
        val uiSetting = naverMap.uiSettings
        uiSetting.isLocationButtonEnabled = true
        
		//location 정보를 가져오기위한 
        locationSource = FusedLocationSource(this@MainActivity, 1000)
        naverMap.locationSource = locationSource
    }

 

현재 위치를 가져오기 위한 함수

  • requestCode 가 1000이 아닐때는 return 해주고
  • 권한이 거부되었을 경우에 네이버맵에 사용할수 없음을 알려준다
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode != 1000){
            return
        }
        if(locationSource.onRequestPermissionsResult(requestCode, permissions, grantResults)){
            if(!locationSource.isActivated){
                //권한이 거부되었음을 네이버에 알려줌
                naverMap.locationTrackingMode = LocationTrackingMode.None
            }
            return
        }
    }

 

 

[결과물]

허용 팝업이 뜨고 허용 되었다면 에뮬레이터에 현재 위치로 지정한 곳에 현위치가 뜬다!

반응형

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

[Android] 외부에 공유하기  (0) 2022.08.19
[Android] TMap POI 사용기1  (0) 2022.08.19
[Android] Manifest Error(Merging Errors)  (0) 2022.08.17
[Android] Database Inspector  (0) 2022.08.16
[Android] Unsolved reference  (0) 2022.08.15

댓글