[Android] 카카오지도 현재 위치 표시

제철맞은생선·2023년 1월 30일
0

ANDROID

목록 보기
11/12
post-thumbnail

카카오맵에서 사용자 현재 위치로 이동하는 방법을 알아보자.

카카오맵이 연동되었다는 가정 하에 진행함으로, 연동이 돼있지 않으면 먼저 하길 바란다.

https://velog.io/@boiledegg/%EC%B9%B4%EC%B9%B4%EC%98%A4%EC%A7%80%EB%8F%84api


해당 코드는 fragment 기준으로 작성된 코드다. 액티비티에서 사용한다면 requireContext()와 requireActivity() 부분들을 this로 바꿔주면 된다

//전체 코드
val PERMISSIONS_REQUEST_CODE = 100
var REQUIRED_PERMISSIONS = arrayOf<String>(
	Manifest.permission.ACCESS_FINE_LOCATION

fun getCurrentLocation() {
        val permissionCheck = ContextCompat
        	.checkSelfPermission(requireContext(), ACCESS_FINE_LOCATION)
        if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
            val lm = requireContext()
            	.getSystemService(Context.LOCATION_SERVICE) as LocationManager
            
            try {
                val userCurLocation = lm
                	.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
                
                val uLatitude = userCurLocation!!.latitude
                val uLogitude = userCurLocation.longitude
                val uCurPosition = MapPoint.mapPointWithGeoCoord(uLatitude, uLogitude)
                
                binding.mapView.setMapCenterPoint(uCurPosition, true)
            } catch (e: java.lang.NullPointerException) {
                Log.e("LOCATION_ERROR", e.toString())

                ActivityCompat.finishAffinity(requireActivity())

                val intent = Intent(context, MapFragment::class.java)
                startActivity(intent)
                System.exit(0)
            }
        } else {
            Toast.makeText
            	(requireContext(), "위치 권한이 없습니다.", Toast.LENGTH_SHORT).show()
            requestPermissions(
                requireActivity(),
                REQUIRED_PERMISSIONS,
                PERMISSIONS_REQUEST_CODE
            )
        }
    }

1. 권한 확인

현재 위치를 불러오려면 안드로이드 위치 권한을 부여받아야 한다.

public static int checkSelfPermission (Context context, String permission)
ContextCompat의 메서드로, 해당 메서드를 사용하여 앱에 이미 권한을 부여 받았는지 확인할 수 있다.

PackageManager.PERMISSION_GRANTED
PackageManager의 상수로, 권한이 부여됐을 경우 반환되는 값과 동일한 값을 가지고 있다.

2. 권한이 있는 경우

안드로이드의 시스템-레벨-서비스에 접근하여 현재 위치 값을 받아와 지도 뷰의 중심이 되는 위치 값에 적용한다.

getSystemService(String name) (Context context, String permission)
주어진 매개변수에 대응되는 안드로이드가 제공하는 시스템 레벨 서비스를 요청한다.

3. 권한이 없는 경우

사용자에게 권한을 요청하는 창을 띄워준다.

static void requestPermissions(Activity activity, String[] permissions, int requestCode)
권한 요청을 하기 위한 메서드이다. 요청하려는 권한이 여러 개인 경우 permissions 배열에 쭉 기입하면 된다. requestCode는 사용자가 직접 지정하는 반환 값이다.


참고 사이트

https://gdbagooni.tistory.com/10
https://copycoding.tistory.com/357

0개의 댓글