권한 확인 및 요청

Kotlin Android DEVELOPMENT IT
//Manigest 클래스는 여러 패키지에 존재하는데 android의 패키지를 임포트하면 된다.

private val REQUEST_READ_EXTERNAL_STORAGE = 1000

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){

            //권한이 허용되지 않음
            if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)){

                //이전에 이미 권한이 거부되었을 때 설명
                alert("사진 정보를 얻으려면 외부 저장소 권한이 필수로 필요합니다.", "권한이 필요한 이유"){
                    yesButton{
                        //권한 요청
                        ActivityCompat.requestPermissions(this@MainActivity,
                            arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
                            REQUEST_READ_EXTERNAL_STORAGE)
                    }
                    noButton {  }
                }.show()
                
            }else{

                ActivityCompat.requestPermissions(this,
                    arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
                    REQUEST_READ_EXTERNAL_STORAGE)

            }

        }else{

            //권한이 이미 허용됨
						//스토리지에 접근

        }

    }

사용자가 권한을 요청하면 시스템은 onRequestPermissionsResult() 메서드를 호출하고 사용자의 응답을 전달한다. 따라서 권한이 부여되었는지 확인하려면 이 메서드를 오버라이드 해야한다.

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    
    when(requestCode){
        REQUEST_READ_EXTERNAL_STORAGE -> {
            if((grantResults.isNotEmpty()) &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //권한 허용됨
                getAllPhotos()
            }else{
                //권 거부
                toast("접근 권한을 거부하셨습니다.")
            }
            return
        }
    }
}

위의 예제는 하나의 권한만 요청하였으므로 grantResults의 [0]번째 인덱스 값만 확인한다.
여러 권한을 요청시 해당 갯수만큼의 인덱스를 확인할 수 있으며, 권한이 승인되면 PERMISSION_GRANTED를
거부되면 PERMISSION_DENIED를 반환한다.

1 thought on “권한 확인 및 요청”

Comments are closed.