Android Kotlin : 사용자 저장소 권한(Permission) 체크

2022. 9. 12. 12:29[Android APP] feat. Kotlin/Kotlin 공부

개요

앱 개발을 할 때 안드로이드 정책등과 같은 이유로 사용자에게 권한을 요청하는 코드를 필수적으로 넣어야한다.

권한을 허용받지 못하면 안드로이드의 기능을 제대로 사용할 수 없다.

앱을 켜보면 위치 권한 요청, 인터넷 권한, 디렉토리 접근권한 등 여러 권한들을 요청하는 앱들을 볼 수 있다.

그냥 무심히 지나치는 동안에도 우리는 권한을 체크하고 있다.

 

 

본문

아래는 사용자 스마트폰의 저장소 권한을 요청하는 코드이다.

 

 

1. Manifest.xml

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

먼저 Manifest 파일에 위 권한을 추가한다.

(때에 따라 여러 요청들도 추가할 수 있다. 예를 들면 

<!-- 통신을 위한 인터넷 연결 권한 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 카메라 기능 권한 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 사용자 위치 정보 권한 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

요론것들)

 

 

2. Activity

//저장소 사용자 권한 요청(안드로이드 정책)
private fun requestMultiplePermissions() {
    Dexter.withActivity(this)
        .withPermissions(
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
        )
        .withListener(object : MultiplePermissionsListener {
            override fun onPermissionsChecked(report: MultiplePermissionsReport) {
                // check if all permissions are granted
                if (report.areAllPermissionsGranted()) {
                    Toast.makeText(
                        applicationContext,
                        "이미 권한체크를 완료했습니다",
                        Toast.LENGTH_SHORT
                    ).show()
                }
                // check for permanent denial of any permission
                if (report.isAnyPermissionPermanentlyDenied) {
                    // show alert dialog navigating to Settings
                }
            }
            override fun onPermissionRationaleShouldBeShown(
                permissions: List<PermissionRequest?>?,
                token: PermissionToken
            ) {
                token.continuePermissionRequest()
            }
        }).withErrorListener {
            Toast.makeText(applicationContext, "Some Error! ", Toast.LENGTH_SHORT).show()
        }
        .onSameThread()
        .check()
}

사용자에게 권한을 허용할 것인지 요청하기 위해 위 코드를 추가해준다.

만약 사용자가 이미 앱에 권한을 허용한 상태라면 "이미 권한 체크를 완료했습니다." 텍스트를 Toast로 띄어준다.

반응형