[Android/Kotlin] #TedPermission을 이용한 권한 관리
💡 개요
어떤 권한을 얻기 위해서는 우선 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을 사용하지 않고 작성했던 권한을 얻는 코드와 똑같이 작동하는 모습을 볼 수 있다.
'Android > Kotlin' 카테고리의 다른 글
[Android/Kotlin] #Zxing라이브러리를 이용한 QR코드 스캔 (0) | 2022.06.07 |
---|---|
[Android/Kotlin] #Fragment 사용법 (0) | 2022.06.07 |
[Android/Kotlin] #View Binding 사용법 (0) | 2022.04.08 |
[Android/Kotlin] #RecyclerView 사용법 (2) (0) | 2022.04.07 |
[Android/Kotlin] #RecyclerView 사용법 (1) (1) | 2022.04.07 |