개발 환경
---------------------------------
OS : Mac
개발 툴 : Android Studio
개발 언어 : Kotlin
targetSdk : 31
minSdk : 23
---------------------------------
안녕하세요
이번 포스팅 주제는 Android에서 permission 요청할 때 Android 버전별로 다르게 적용해야하는 버전 및 처리 방법에 대한 내용입니다.
<참고참고>
</참고참고>
Android permission 변경 사항중에서 이번 포스팅은 "READ_PHONE_STATE" 권한에 대해 다루겠습니다.
READ_PHONE_STATE permission android 10 이하를 타겟팅 할 때 전화번호를 가져오는 API에 액세스 해야하는 경우 사용합니다.
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
android 11 이상의 버전을 타겟팅 할 경우는 "READ_PHONE_NUMBERS" permission 요청을 합니다.
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
하지만 App이 MinSDK 버전이 android 버전 10과 11을 모두 포함하는 경우에는 두개의 permission 모두 받아야 합니다.
일단 READ_PHONE_NUMBERS 권한과 READ_PHONE_STATE permission 을 AndroidManifest.xml에 셋팅합니다.
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
그리고 사용자에게 권한을 받을 화면 .kt 에다가 permission 변수를 하나 선언해 줍니다.
private var permission: String? = null
현재 버전이 Build.Version_CODES.R (sdk 30) 이상이면
READ_PHONE_NUMBERS permission을
이하면 READ_PHONE_STATE permission을 셋팅하면 됩니다.
permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Manifest.permission.READ_PHONE_NUMBERS
} else {
Manifest.permission.READ_PHONE_STATE
}
그리고 ActivityCompat.requestPermissions에 셋팅한 permission을 추가합니다.
ActivityCompat.requestPermissions(
this, arrayOf(
permission,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_SMS,
), Common.REQUEST_CODE
)
위 코드로 사용자에게 permission 요청 후 아래 코드로 결과 값 받아 처리하면 됩니다잉
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String?>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
Common.REQUEST_CODE -> {
if (grantResults.size == 3 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED && grantResults[2] == PackageManager.PERMISSION_GRANTED) {
checkCompatibleModel()
} else {
Toast.makeText(
applicationContext,
R.string.access_storage_phone_number,
Toast.LENGTH_SHORT
).show()
}
}
}
}
'개발노트 > Android' 카테고리의 다른 글
[Kotlin] OKHttp Logging Interceptor사용하기 (0) | 2023.02.20 |
---|---|
[Kotlin] ListView 만들기 (0) | 2023.02.20 |
[Kotlin] : 안드로이드 JWT 토큰 인증 [Retrofit, okHttp3] (0) | 2023.02.20 |
[Kotlin] java script Alert & Confirm 띄우기 (0) | 2023.02.19 |
[Kotlin]JavaScript < ㅡ > Native 통신 (0) | 2023.02.17 |
댓글