일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- chatGPT
- 개발시작
- ios
- SharedPreference
- 코루틴
- Jitpack
- 앱개발
- Java
- 상태관리
- Swift
- 초보개발자
- 개발자도전기
- foregroundservice
- 앱심사대응
- Developer
- 클래스 설계
- EncryptedSharedPreferences
- 문제해결
- Android
- compose
- Kotlin
- 모바일앱개발
- 안드로이드
- WorkManager
- 문제개선
- 앱심사경험
- androidstudio
- 코틀린
- coroutines
- SwiftUI
- Today
- Total
개발린생
[안드로이드/Kotlin] 일반 권한과 위험 권한 / 앱 권한 요청하기 본문
* 이 포스트에 작성된 코드는 Kotlin 언어로 작성하였습니다.
안드로이드 앱에 기능을 구현할 때, 데이터나 기능의 사용을 위해 설정 파일에 권한을 명세합니다.
이 권한 중에는 일반 권한과 위험 권한이 있으며 보호 수준에 따라 권한을 명세하고 요청하는 방법을 알아보겠습니다.
일반 권한
일반 권한은 사용자에게 권한 승인 여부를 묻지 않습니다.
흔한 예시로는 네트워크 통신을 기반의 앱이라면 필수로 명세하는 INTERNET 권한이 있습니다.
앱에서 네트워크 및 인터넷 사용을 위해 명세하는 권한이며 적용 위치와 코드는 아래와 같습니다.
AndroidManifest.xml
명세 위치
<manifest ...>
<!--해당 권한 추가-->
<application ...>
...
</application>
</manifest>
권한 명세
<!--일반 권한 : 네트워크 및 인터넷 사용 권한-->
<uses-permission android:name="android.permission.INTERNET" />
위험 권한 (런타임 권한)
위험 권한은 사용자에게 권한 승인 요청 후 권한이 주어집니다.
앱에서 카메라를 사용하거나, 위치 정보 사용, 저장소 읽기 등 앱이 사용자의 개인정보와 관련된 데이터나 기능을 사용하거나 다른 앱과 기기 작동에 영향을 줄 수 있는 권한입니다.
위험 권한 처리를 위한 단계와 사용 메서드는 아래와 같습니다.
위험 권한 처리 단계
- 권한에 대한 사용자 승인 확인 (이미 승인이 되어있는지)
- 사용자 승인 요청
- 사용자 승인 후 처리
권한 요청 시 사용하는 메서드
- 권한 승인 여부 확인 - ContextCompat.checkSelfPermission(Context, String)
- 권한 승인 요청 - Activity.requestPermissions(String[], int)
- 권한 승인 요청 결과 확인 - ActivityCompat.onRequestPermissionsResult(int, String[], int[])
AndroidManifest.xml
명세 위치
<manifest ...>
<!--해당 권한 추가-->
<application ...>
...
</application>
</manifest>
권한 명세
<!--위험 권한 : 카메라 권한-->
<uses-permission android:name="android.permission.CAMERA" />
권한 명세 위치와 명세까지는 동일하나
위 처리 단계와 메서드를 적용한 권한 승인 요청 코드를 작성해야합니다.
메서드 생성
아래와 같은 메서드를 생성한 후 원하는 위치에서 호출해줍니다.
/**
* 권한 승인 여부 확인
* @return 승인 여부
*/
private fun isCheckedPermission(): Boolean {
return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
}
/**
* 권한 승인 요청
*/
private fun requestPermission() {
requestPermissions(arrayOf(Manifest.permission.CAMERA), 99)
}
/**
* 권한 승인 요청 결과 확인
*/
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 99) {
var checkResult = true
// 모든 퍼미션을 허용했는지 체크
for (result in grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
checkResult = false
break
}
}
// 권한 승인 여부 출력
binding.tvPermissionState.text =
if (checkResult) {
"권한 있음"
} else {
Toast.makeText(this, "모든 권한을 허용해주세요.", Toast.LENGTH_SHORT).show()
"권한 없음"
}
}
}
저는 앱 화면이 보여질 때마다 권한 승인 여부 확인을 하고 해당 여부를 볼 수 있게 TextView에 출력해두었습니다.
권한 요청 버튼 클릭 시, 해당 권한 승인을 요청하는 방식으로 처리하고 갱신되는 승인 여부를 TextView에 출력하게 구현해두었습니다.
아래 Github 예제 코드 참고하시면 좋을 듯 합니다.
https://github.com/YuHyeon-Kim/PermissionCheck.git
참고 공식 문서
https://developer.android.com/training/permissions/requesting
https://developer.android.com/reference/android/Manifest.permission
'Dev Lab ✧.·˚ > Android & iOS' 카테고리의 다른 글
Android 비동기 작업 처리를 위한 Coroutines과 AsyncTask (8) | 2024.10.20 |
---|---|
Android와 iOS 개발의 공통점 (4) | 2024.10.16 |
현업 안드로이드 앱 개발자의 Android와 iOS 동시 공부 도전기! (5) | 2024.10.15 |
[안드로이드/Kotlin] Room 라이브러리 사용 (0) | 2023.01.17 |
[안드로이드/Kotlin] SharedPreferences 암호화 사용 (0) | 2022.11.09 |