반응형
오늘은 Android에서는 카메라기능을 사용할 경우,
단순히 권한을 선언하는 것으로는 부족하고요.
동적으로 유저에게 승인을 얻어야 하는데요.
오늘은 동적으로 권한을 얻는 방법에 대해 알아보겠습니다.
1. Manifest
Manifest에 Camera권한을 설정하지 않으면,
아무리 동적권한을 구현해도 카메라기능은 동작하지 않습니다.
manifest에 아래와 같이 권한을 요청해 둡니다.
<manifest>
<uses-permission android:name="android.permission.CAMERA"/>
</manifest>
2. 동적 권한 요청 구현
그럼 실제로 동적 권한을 요청하는 코드를 볼까요?
2-1. permissionLauncher작성하기
가장 먼저 할 일은,
Activity(혹은 Fragment) 내에 아래와 같이,
아래와 같이 permissionLauncher를 작성하는 일입니다.
권한이 거부되면,
사용자에게 권한이 필요하다고 알리는 다이얼로그를 띄우도록 하겠습니다.
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// 권한이 승인시, 카메라 실행
startCamera()
} else {
// 권한이 거부되면 사용자에게 알림
showPermissionDeniedDialog()
}
}
private fun showPermissionDeniedDialog() {
AlertDialog.Builder(this)
.setMessage("카메라 권한이 필요합니다")
.setPositiveButton("확인", null)
.show()
}
private fun startCamera() {
// 카메라 실행 로직
}
심플하게 버튼을 클릭하면,
동적권한을 요청하도록 해 보겠습니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
cameraButton.setOnClickListener {
checkCameraPermission()
}
}
버튼을 클릭하면 아래 함수를 호출하도록 합니다.
권한이 있을 경우, startCamera함수 부분을 실행하고요.
없으면 위에서 작성한 launcher코드를 실행하도록 합니다.
private fun checkCameraPermission() {
if (ContextCompat.checkSelfPermission(
this,Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED) {
startCamera()
} else {
// 권한이 없을 경우, 요청하기
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
}
}
이상으로 카메라의 동적권한을 요청하는 코드에 대해서 알아보았습니다.
동적권한 요청이라는 것이 꽤나 부담스러운 구현이지만,
여러 번 하다 보면, 이 글에서 보는 것처럼 어렵지 않습니다.
728x90
댓글