GDSC HUFS 3기/Android with Kotlin Team 6

[6팀] 코틀린 안드로이드 기초강의 37 권한처리

qkrgusqls 2021. 11. 8. 20:42

이 글은 이것이 안드로이드다 with 코틀린(개정판) 를 참고하여 작성하였습니다.

작성자 : 박현빈

개발환경은 Windows, Android Studio입니다.

 

권한처리 

권한처리는 일반권한과 위험권한으로 나뉜다. 

위험권한은 보안과 관련된 것인데 사용자에게 한번 더 물어보는 과정이다. 

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

인터넷 권한은 일반권한으로 메니페스트에 명세 해주는 것만으로 사용 가능하다. (써주는 것만으로도 사용 가능) 

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

위험권한으로 메니페스트에도 명세하고 코드에서도 한번 더 확인해야 한다.

위의 코드들을 Android.Manifest.xml파일에 추가해준다. 

 

카메라 버튼 

binding.btnCamera.setOnClickListener{
            checkPermission()
        }

카메라 버튼을 클릭하면 권한을 확인하는 함수를 실행한다. 

fun checkPermission() {
        val cameraPermission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA )

        if(cameraPermission == PackageManager.PERMISSION_GRANTED) {
            openCamera()
        } else {
            requestPermission()
        }
    }

    fun openCamera(){
        Toast.makeText(this, "카메라를 실행합니다.", Toast.LENGTH_SHORT).show()

    }

    fun requestPermission(){
        // 실제 권한 요청을 한다.
        ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CAMERA), 99)
    }

toast를 통해 "카메라를 실행시킵니다"라는 메시지를 팝업시켜준다.

requestPermissions는 하위버전에서 실행이 안될 수 있으므로 ActivityCompat을 추가해주면서 this로 받고 Arrayof로 배열에 담아준다.

requestcode는 권한요청의 위치 확인을 위해 보내진다. 

 when(requestCode) {
            99 -> {
                if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    openCamera()
                } else {
                    Toast.makeText(this, "권한을 승인하지 않으면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show()
                }
            }
        }

grantResult의 첫번째 값이 승인되었는지 확인한다. 

승인되면 openCamera(), 카메라를 실행시킨다.

 

CAMERA버튼을 클릭했을 때 

에뮬레이터 실행시 카메라를 실행합니다라는 창이 켜지면 된다. 

fun openCamera(){
        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        startActivity(intent)

    }

카메라 앱을 직접 여는 코드이다. intent 코드를 활용한다. 

에뮬레이터 실행시 카메라 앱이 띄워지면 성공이다.