[Kotlin]안드로이드 권한 요청


 

 

권한요청은 JAVA 버전도 만들었었지만 이번에 개발하는 Kotlin(이하 코틀린)에서 사용할 권한 요청을 정리해 보았습니다. (JAVA는 추후에 다시)

 

1. JAVA와 동일하게 AndroidManifest.xml에서 권한을 요청할 permission을 지정해줍니다.

 예 ) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      //저장소 쓰기에 대한 권한 요청

2. PermissionCheck Class (아래 소스코드 참고)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    public fun permissionCheck() {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 - 첫번째 매개변수는 Activity를 넘겨받으며, 두번째 매개변수는 Array 즉, 권한요청할 permission의 배열을 받아옵니다.

 - permissionCheck 함수를 돌려주면 permission 배열내에서 권한승인이 되지않은 권한을 모드 failRequestPermissionList 로 담아줍니다. 담아준 결과는 Empty 즉, 빈값이 아니라면 권한을 요청하게됩니다.

 

3. 실행할 위치에 권한요청할 permission의 Array를 생성해주고(아래 requestPermissions), PermissionCheck 클래스의 permissionCheck 함수를 실행해줍니다.

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

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  val permissionCheck = PermissionCheck(this, requestPermissions)
  permissionCheck.permissionCheck()
}

 

** 만일 permissionCheck 함수를 실행하지 않고 바로 실행하고 싶다면 init 활용 (아래 참조)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    init {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 -> 사용시에는 아래처럼 PermissionCheck 클래스에 매개변수만 담아주면 권한체크가 실행됩니다.

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

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  PermissionCheck(this, requestPermissions)
}

 

*** Reference : https://developer.android.com/training/permissions/requesting?hl=ko

*** 소스에 문제가 있을 시 댓글 달아주시면 최신화하도록하겠습니다.

+ Recent posts