//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.