프로그래밍/android

[android] Android 11, targetSdkVersion 30 전화번호 읽기 권한 READ_PHONE_STATE, READ_PHONE_NUMBERS

-샤리- 2021. 1. 27. 11:35

우선 Android 11의 권한 업데이트 관련 글을 읽어보자. Android 11은 파일접근, 전화번호 읽어오기, 이번만 허용 등 보안관련 사항이 많이 변경 되었다. 

 

developer.android.com/about/versions/11/privacy/permissions?hl=ko

 

Android 11의 권한 업데이트  |  Android 개발자  |  Android Developers

Android 11에서는 사용자가 위치, 마이크, 카메라에 관해 더욱 세분화된 권한을 지정할 수 있습니다. 또한 시스템은 Android 11 이상을 타겟팅하는 사용하지 않는 앱의 권한을 재설정하며 앱은 시스

developer.android.com

 

 

즉, 폰의 전화번호를 읽어오기 위해서 이제부터는 READ_PHONE_NUMBERS를 사용하면 된다. 그러나 기존의 사용자 또는 하위 버전에도 제공해 주어야 하기 때문에 몇가지 처리가 필요하다.

 

AndroidManifest.xml 선언

<uses-permission android:name="android.permission.READ_PHONE_STATE" 
	android:maxSdkVersion="29"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />

 

권한요청 예시

fun requestAllPermissions(): Boolean{
        if(ContextCompat.checkSelfPermission(activity,
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) Manifest.permission.READ_PHONE_NUMBERS else Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED){
            var permissions: Array<String> = arrayOf(
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) Manifest.permission.READ_PHONE_NUMBERS else Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.CAMERA
            )
            ActivityCompat.requestPermissions(activity, permissions, 0)
            return false
        }
        return true
    }