[Android/Kotlin] #TedPermission을 이용한 권한 관리

2022. 4. 20. 23:03
728x90
반응형

💡 개요


어떤 권한을 얻기 위해서는 우선 AndroidManifets.xml에 필요한 권한을 선언해줘야 한다.

[AndroidManifest.xml]

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

 

그리고 기존에 권한을 얻기 위해서는 아래와 같은 과정을 작성해줘야 했다.

1. 권한이 얻어졌는지 확인

2. 권한이 얻어지지 않았다면 권한을 요청

3. 권한은 얻어졌다면 필요한 과정을 수행

[MainActivity.kt]

package com.example.tedpermission

import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

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

        //권한 확인 메소드 호출
        checkPermission()
    }

    //권한 확인
    fun checkPermission() {
        // 1. 위험권한(Camera) 권한 승인상태 가져오기
        val cameraPermission =
            ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)

        if (cameraPermission == PackageManager.PERMISSION_GRANTED) { // 카메라 권한이 승인된 상태일 경우
            startProcess()
        }

        else { // 카메라 권한이 승인되지 않았을 경우
            requestPermission()
        }
    }

    // 2. 권한 요청
    private fun requestPermission() {
        ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CAMERA), 99)
    }

    // 권한 처리
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        when (requestCode) {
            99 -> {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    startProcess()
                }
                else {
                    Log.d("MainActivity", "종료")
                }
            }
        }
    }

    // 3. 카메라 기능 실행
    fun startProcess() {
        Toast.makeText(this, "카메라 기능 실행", Toast.LENGTH_SHORT).show()
    }
}

이렇게 작성할 경우 코드가 길어지고 귀찮다는 단점이 있는데, 

TedPermission 라이브러리는 이 과정을 간단하고 편하게 작성할 수 있다.

 

💡 TedPermission이란?


TedPermission은 안드로이드 권한 확인 및 요청 처리를 간단하게 할 수 있도록 도와주는 라이브러리이다.

자세한 설명은 아래의 블로그나 Github에서 자세한 설명을 볼 수 있다.

https://gun0912.tistory.com/55

 

[안드로이드/Android]6.0 마시멜로우 권한체크하고 최적화하기

지난 2015년 5월에 열린 Google I/O에서 안드로이드 6.0 마시멜로우가 공개되었습니다. 여러가지 개선사항들중 우리 개발자들에게 큰 영향력을 끼칠수 있는 권한획득 방식이 변경되었습니다. 물론

gun0912.tistory.com

https://github.com/ParkSangGwon/TedPermission

 

GitHub - ParkSangGwon/TedPermission: Easy check permission library for Android Marshmallow

Easy check permission library for Android Marshmallow - GitHub - ParkSangGwon/TedPermission: Easy check permission library for Android Marshmallow

github.com

 

💡 예제 코드


처음 개요에서 작성한 카메라 권한 얻기 코드를 TedPermission을 이용해 한 번 구현해볼 것이다.

가장 먼저, 동일하게 AndroidManifest.xml에 필요한 권한을 선언해준다.

[AndroidManifest.xml]

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

 

그리고 라이브러리를 사용하기 위해 Module수준의 build.gradle에 다음 dependency를 추가해준다.

[build.gradle]

dependencies {
    // TedPermission
    implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
}

 

그리고 코드를 작성하면 된다.

[MainActivity.kt]

package com.example.tedpermission

import android.content.pm.PackageManager
import android.icu.number.NumberFormatter.with
import android.icu.number.NumberRangeFormatter.with
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.gun0912.tedpermission.PermissionListener
import com.gun0912.tedpermission.normal.TedPermission
import java.util.jar.Manifest

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

        requestPermission()
    }

    private fun requestPermission() {
        TedPermission.create()
            .setPermissionListener(object : PermissionListener {

                //권한이 허용됐을 때
                override fun onPermissionGranted() {
                    startProcess()
                }

                //권한이 거부됐을 때
                override fun onPermissionDenied(deniedPermissions: MutableList<String>?) {
                    Toast.makeText(this@MainActivity, "카메라 기능 실행", Toast.LENGTH_SHORT).show()
                }
            })
            .setDeniedMessage("카메라 권한을 허용해주세요.")// 권한이 없을 때 띄워주는 Dialog Message
            .setPermissions(android.Manifest.permission.CAMERA)// 얻으려는 권한(여러개 가능)
            .check()
    }

    // 카메라 기능 실행
    fun startProcess() {
        Toast.makeText(this, "카메라 기능 실행", Toast.LENGTH_LONG).show()
    }
}

주석에 작성했듯이

onPermissionGranted( )는 권한이 허용됐을 때, onPermissionDenied( )는 권한이 거부됐을 때에 실행될 코드를 작성한다.

그리고. setDeniedMessage(" ")는 권한을 허용하지 않았을 때 띄울 Dialog의 Message를 의미한다.

. setPermission( )는 얻으려는 권한을 작성하면 되는데 여러 개의 권한을 ', '로 구분하여 작성할 수 있다.

마지막으로. check( )를 하면 권한을 얻는 과정이 끝이 난다.

 

💡 결과


TedPermission을 사용하지 않고 작성했던 권한을 얻는 코드와 똑같이 작동하는 모습을 볼 수 있다.

728x90
반응형

BELATED ARTICLES

more