권한 확인 및 요청

Kotlin Android DEVELOPMENT IT
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//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() 메서드를 호출하고 사용자의 응답을 전달한다. 따라서 권한이 부여되었는지 확인하려면 이 메서드를 오버라이드 해야한다.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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.