//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()) && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//권한 허용됨
getAllPhotos()
}else{
//권 거부
toast("접근 권한을 거부하셨습니다.")
}
return
}
}
}
위의 예제는 하나의 권한만 요청하였으므로 grantResults의 [0]번째 인덱스 값만 확인한다.
여러 권한을 요청시 해당 갯수만큼의 인덱스를 확인할 수 있으며, 권한이 승인되면 PERMISSION_GRANTED를
거부되면 PERMISSION_DENIED를 반환한다.
1 thought on “권한 확인 및 요청”
Comments are closed.