안드로이드 개발 팁 #25 - TED permission 라이브러리를 활용한 권한 요청
앱 실행 도중에 권한 요청 코드를 만들어야 하는 경우가 있습니다. 예를 들면, 카메라 권한이 그렇지요. 안드로이드에서 제공하는 방법은 좀 복잡하고 어렵습니다. 그렇지만 TED permission이라는 라이브러리를 사용하여 보다 간편하게 구현할 수 있어요. 오늘은 이를 활용하여 권한 요청을 처리하는 방법을 정리해 봅니다.
모듈의 build.gradle 파일 수정
모듈단의 build.gradle 파일의 dependencies 블록 안에 TED permission 라이브러리를 포함해 주세요.
dependencies {
// ...
implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
// ...
}
PermissionListener 객체 정의
PermissionListener 인터페이스를 구현해야 합니다. 이것은 권한의 승인 또는 거부를 처리하기 위한 것입니다. 아래 예에서는 단순히 승인/거부 결과를 토스트로 알립니다.
private val permissionlistener: PermissionListener = object : PermissionListener {
override fun onPermissionGranted() {
Toast.makeText(
this@MainActivity,
"카메라 권한이 승인되었습니다.",
Toast.LENGTH_SHORT
).show()
}
override fun onPermissionDenied(deniedPermissions: List<String>) {
Toast.makeText(
this@MainActivity,
"카메라 권한이 거부되었습니다.",
Toast.LENGTH_SHORT
).show()
}
}
TedPermission 객체 정의 그리고 권한 체크
먼저 아래 코드로 예를 보여 드립니다. 이 코드는 권한이 필요한 시점에 실행하면 됩니다. TedPermission 클래스의 create() 정적 메소드를 호출하여 TedPermission 객체를 생성할 수 있구요. 이후 set... 메소드들을 호출하여 필요한 설정을 할 수 있습니다. 설정을 마치고 나서 check() 메소드를 호출해주세요. 그러면 권한 체크를 합니다. 권한이 결정이 안 되었으면, 이를 설정하기 위한 팝업이 뜨구요. 사용자가 무엇을 선택했느냐에 따라 등록된 PermissionListener 구현 객체의 onPermissionGranted() 또는 onPermissionDenied() 메소드가 실행됩니다.
TedPermission.create()
.setPermissionListener(permissionlistener)
.setRationaleMessage("앱을 사용하려면, 접근 권한이 필요합니다.")
.setDeniedMessage("카메라 권한이 거부되었습니다. 이를 다시 얻으려면, [설정] > [권한]으로 이동하세요.")
.setPermissions(
Manifest.permission.CAMERA
)
.check()
- setPermissionListener: 위에서 정의한 PermissionListener 구현 객체를 등록합니다.
- setRationaleMessage(msg): 권한이 설정되지 않았으면, msg를 보여주는 팝업을 띄웁니다.
- setDeniedMessage(msg): 사용자가 권한을 거부하면, msg를 보여주는 팝업을 띄웁니다.
- setPermissions(permissions): 요청할 권한(들)입니다.
지난 안드로이드 개발 팁
- #24 - EditText 뷰에 텍스트 입력하고 0.5초 후 액션 설정
- #23 - Uri 객체로부터 읽은 파라메터에서 '+' 문자가 ' '로 바뀌어 있는 문제
- #22 - RxJava 활용하여 몇초 후 코드 실행
- #21 - 맥북 아이클라우드로 프로젝트 복사 후 빌드 안 되는 문제
- #20 - 툴바 정의 방법 (1) 타이틀 및 배경색 설정
- #19 - Index corrupted 오류
- #18 - 오래된 프로젝트의 build.gradle 파일 수정
- #17 - 뷰 바인딩 적용된 프래그먼트에 데이터 바인딩 적용 후 빌드시 발생하는 오류
- #16 - 특정 일이 속하는 주의 모든 날짜를 배열로 구하는 방법
- #15 - RecyclerView에 리스트를 로딩한 후 처리할 일 작성
- #14 - RecyclerView 뷰에서 항목 클릭시 뷰가 깜빡이는 문제
- #13 - 공통으로 사용할 색상 리소스 만들고 뷰에 적용
- #12 - 코틀린 언어 변환시 추가로 수정할 build.gradle 파일들
- #11 - 리스트/배열로부터 찾을 원소의 위치 읽기
- #10 - 앱의 다크 모드 진입 막는 방법
- #9 - 데이터 바인딩/뷰 바인딩 사용하지 않을 경우 자체적으로 만드는 Views 클래스
- #8 - TextView에 linear gradient color 적용하기
- #7 - 다이얼 화면 연결하기 위해 Activity 클래스의 확장 메소드 작성
- #6 - 웹 브라우저를 여는 확장 메소드 작성
- #5 - HTML 적용된 TextView에서 링크 클릭은 어떻게 구현?
- #4 - RxJava의 Observable, Single 객체의 기본 설정 수행 메소드 정의하기
- #3 - 특정 화면 이동시 다른 화면 모두 닫기
- #2 - HTML 이스케이핑 적용된 문자 풀어주기
- #1 - TextView로 HTML 내용 보여주기
Posted through the AVLE Dapp (https://avle.io)
Upvoted! Thank you for supporting witness @jswit.
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.