Android Kotlin Permission - registerForActivityResult

Notepad96

·

2022. 4. 26. 23:56

300x250

 

 


1. 결 과

결 과

# 이 글은 애플리케이션에서 필요한 권한을 요청하고 확인하여 권한 허용 여부의 따른 동작을 설정하는 방법을 기존과는 다르게 registerForActivityResult를 사용하여 기존보다 더욱 간단한 방법으로 권한을 요청할 수 있는 방법을 기술한다.

 

 


2. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.permissionsexample02">

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

...

</manifest>

 

# 추가하고자 하는 권한을 매니페스트 파일서 추가해준다.

 

# 해당 예시에서는 Camera와 External_Storage read/wirte 권한을 추가

 


3. MainActivity.kt

package com.example.permissionsexample02

import android.Manifest
import android.os.Bundle
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    // 권한 요청
    private val requestMultiplePermission = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { results ->
        results.forEach {
            if(!it.value) {
                Toast.makeText(applicationContext, "${it.key} 권한 허용 필요", Toast.LENGTH_SHORT).show()
                finish()
            }
        }
    }

    // 추가할 권한들, 매니페스트 파일서도 추가 필요
    private val permissionList = arrayOf(
        Manifest.permission.CAMERA,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE)

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

        requestMultiplePermission.launch(permissionList)
    }
}

 

# requestMultiplePermission이라는 registerForActivityResult를 선언한다.

 

# registerForActivityResult 내부에서는 결과값(results)에 따른 동작을 정의한다. 

 

해당 예시에서는 결과값이 false일 경우 (즉, 사용자가 권한을 거부하였을 경우)에는 권한이 필요하다는 toast 메시지를 출력하면서 Application을 자동으로 종료되도록 구현하였다.

 

# permissionList는 배열로서 권한들을 한곳에 묶어서 관리한다.

 

# 위에서 선언하였던 requestMultiplePermission의 launch를 요청하고자 하는 권한 리스트인 permissionList를 파라미터로 주어 권한을 요청한다.

 

 

 

 


4. 전체 코드

 

 

GitHub - Notepad96/BlogExample

Contribute to Notepad96/BlogExample development by creating an account on GitHub.

github.com

 

300x250