퍼미션 설정

k_hyun·2023년 2월 1일
0

퍼미션?

앱의 특정 기능에 부여하는 접근 권한을 말한다.

< permisson >

  • 기능을 보호하려는 앱의 매니페스트 파일에 설정한다.

< uses-permission >

  • 퍼미션으로 보호된 기능을 사용하려는 앱의 매니페스트 파일에 설정한다.

퍼미션 설정

<permission android:name="com.example.permission.TEST_PERMISSION"
	android:label="Test Permission"
    android:description="@string/permission_desc"
    android:protectionLevel="dangerous"/>

name - 퍼미션을 구별하는 식별자 역할
label, description - 퍼미션을 이용하는 외부 앱에서 권한 인증 화면에 출력할 퍼미션의 정보

퍼미션 보호 수준

normal - 낮은 수준의 보호. 사용자에게 권한 요청 X
dangerous - 높은 수준의 보호. 사용자에게 권한 요청 O
signature - 같은 키로 인증한 앱만 실행
signatureOrSystem - 안드로이드 시스템 앱이나 같은 키로 인증한 앱만 실행

퍼미션 사용 설정

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

퍼미션 허용 확인

API 레벨 23 이후로는 사용자가 권한 화면에서 퍼미션을 거부할 수 있게 되었다.

퍼미션 허용 확인 함수

open static fun checkSelfPermission(
	@NonNull context: Context,
    @NonNull permission: String
): Int

두 번째 매개변수가 퍼미션을 구분하는 이름이다.
결과값은 다음 중 하나의 상수로 전달된다.

  • PackageManager.PERMISSION_GRANTED - 권한을 허용한 경우
  • PackageManager.PERMISSION_DENIED - 권한을 거부한 경우

퍼미션 허용 요청

퍼미션을 거부한 상태라면 사용자에게 해당 퍼미션을 허용해 달라고 요청해야 한다.
ActivityResultLauncer를 이용한다.
ActivityResultLauncer 객체는 registerForActivityResult() 함수를 호출해서 만든다.

public final <I, O> ActivityResultLauncher<I> 
	registerForActivityResult (
    	@NonNull ActivityResultContact<I, O> contract,
        @NonNull ActivityResultCallback<O> callback)

ActivityResultContract - 어떤 요청인지 나타내는 객체
ActivityResultCallback - 결과를 받았을 때 호출되는 콜백

val requestPermissionLauncher = registerForActivityResult(
	ActivityResultContracts.RequestPermission()
    ){ isGranted ->
    	if (isGranted) {
        	...
        } else {
        	...
        }
}

퍼미션 허용 요청 실행

requestPermissionLauncher.launch("android.permission.ACCESS_FINE_LOCATION")

요청 결과는 registerForActivityResult() 함수의 두 번째 매개변수로 등록한 콜백으로 전달된다.

0개의 댓글