본문 바로가기

Kotlin

[ j android] 권한설정하기 (Permission)

728x90
반응형

핸드폰에서 카메라나 위치, 저장공간 등등 권한 설정하는 방법을 포스팅하겠습니다.

 

 

1. androidmanifest.xml에 권한 설정하고싶은 것을 추가해준다.

 ex-1) camera

<uses-permission android:name="android.permission.CAMERA" />

 ex-2) location

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

 

 

2. 체크할 권한을 변수에 담아준다.

ex) location의 경우

val requestPermissions = arrayOf(
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION,
    )

 

 

3. 권한 체크하기

권한이 설정이 안되어있으면 requestPermission으로 권한을 요청한다.

 

private val permissionRequestCode = 100
var failRequestPermissionList = ArrayList<String>()


    fun callPermission() {
        for (permission in requirePermissions) {
            if (ContextCompat.checkSelfPermission(
                    permissionActivity.applicationContext,
                    permission
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                failRequestPermissionList.add(permission)
            }
        }

        if (failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)

            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

                ActivityCompat.requestPermissions(
                    permissionActivity,
                    failRequestPermissionList.toArray(array),
                    permissionRequestCode
                )

            }else{
                ActivityCompat.requestPermissions(
                    permissionActivity,
                    failRequestPermissionList.toArray(array),
                    permissionRequestCode
                )
            }
        }
    }

 

 

4. 권한 결과값 받기

Activity에서 onRequestPermissionResult 를 통해 권한 결과를 받는다.

 

 override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            permissionRequestCode -> {
                // 권한이 비어있는 경우 에러
                if (grantResults.isEmpty()) {
                   
                }
                
                //거부된 권한이 있는지 확인한다
                var isPermitted = true
                val deniedPermission = ArrayList<String>()
                for ((id, result) in grantResults.withIndex()) {
                    if (result == PackageManager.PERMISSION_DENIED) {
                        isPermitted = false
                        deniedPermission.add(permissions[id])
                    }
                }

                // 권한이 모두 충족된 경우
                if (grantResults.isNotEmpty() && isPermitted) {


                } else {
                    // 거부만 선택한 경우

            }
        }
    }
728x90
반응형