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 코드를 활용한다.
에뮬레이터 실행시 카메라 앱이 띄워지면 성공이다.