【Android】카메라 등의 권한 요구 실장 방법 정리

개요



자작의 앱으로 카메라나 마이크를 사용하고 싶은, 위치 정보를 취득하고 싶다, 등으로, 유저에게 권한을 허가해 주었으면 하는 경우가 있습니다. Android 6.0(API 레벨 23) 이상에서는 런타임에 필요한 권한을 허용하도록 요청해야 합니다(이전에는 앱 설치 시 함께 요청됨).
권한 요청을 구현하는 방법을 요약합니다. 필요한 권한은 AndroidManifest 에 기술해 주세요.

권한 요청



아래에서는 카메라 권한을 요청하기로 결정합니다.

먼저 현재 카메라의 액세스 권한 상태를 확인합니다.
checkSelfPermission() 에서 특정 권한이 있는지 확인합니다. 어떤 경우는 0( PackageManager.PERMISSION_GRANTED ), 없는 경우는 1( PackageManager.PERMISSION_DENIED )이 반환됩니다.
val cameraPermission = ContextCompat.checkSelfPermission(context!!, Manifest.permission.CAMERA)

(여기서 이미 권한이 있다(granted) 경우는, 그대로 카메라 기동등의 처리로 진행해 주세요 )

그런 다음 카메라 권한을 요청합니다.
requestPermissions() 에서 특정 권한을 허용하도록 사용자에게 요청합니다. 두 번째 인수로 여러 권한을 지정하여 함께 요청할 수 있습니다.
여기에 표시되는 Android 표준 대화상자는 맞춤설정할 수 없습니다.
if (cameraPermission != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(activity!!, arrayOf(Manifest.permission.CAMERA), REQUEST_PERMISSION) // REQUEST_PERMISSION は定数
}

이것으로 간단한 권한 요청이 완료됩니다.

권한 요청에 대한 설명 보기



예를 들어, "이 기능을 사용하려면 카메라 권한을 부여하십시오"와 같은 권한 요청에 대한 설명을 표시하고 싶을 수 있습니다. 허가되지 않은 경우 매번 표시하는 방법 외에도 shouldShowRequestPermissionRationale()을 사용하여 사용자가 요청을 허용하지 않은 경우에만 표시하는 방법도 있습니다.shouldShowRequestPermissionRationale()는 이전에 사용자가 요청을 허용하지 않은 경우 true를 반환하지만 향후 표시하지 않음을 선택한 경우 false를 반환합니다.

대화상자에서 '향후 표시 안함'을 선택한 후 요청이 필요한 경우



사용자가 카메라 권한 요청에서 '향후 표시하지 않음'을 선택한 후 '역시 카메라 기능을 사용하고 싶다......'라고 생각할지도 모릅니다. 이 경우 기기의 '설정'에서 권한을 부여할 수밖에 없으며 권한 요청 대화 상자를 다시 표시할 수 없습니다.
권한이 허가되고 있는 경우, shouldShowRequestPermissionRationale()false 를 돌려줍니다. '향후 표시 안 함'을 선택했을 때 뭔가 액션을 하고 싶다면(''설정'에서 허용해 주세요'와 같은 설명을 표시하는 등) 경우 checkSelfPermission()shouldShowRequestPermissionRationale() 확인해야합니다.
val cameraPermission = ContextCompat.checkSelfPermission(context!!, Manifest.permission.CAMERA)
val cameraRationale = ActivityCompat.shouldShowRequestPermissionRationale(activity!!, Manifest.permission.CAMERA)
if (cameraPermission != PackageManager.PERMISSION_GRANTED) {
    if (cameraRationale) {
        ActivityCompat.requestPermissions(activity!!, arrayOf(Manifest.permission.CAMERA), REQUEST_PERMISSION)
    } else {
        AlertDialog.Builder(context!!)
            .setMessage("デバイスの「設定」でカメラの権限を許可してください。")
            .setPositiveButton("OK") { _, _ ->
                // OK button pressed
            }
            .create().show()
    }
}

위의 코드 예제에서 PositiveButton을 누른 후 설정 화면을 열려면 여기를 참조하십시오 : 【Android】 앱의 권한을 허용하도록 "설정"을 열고 싶습니다.

참고

좋은 웹페이지 즐겨찾기