앱의 특정 기능에 부여하는 접근 권한을 말한다.
< 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
두 번째 매개변수가 퍼미션을 구분하는 이름이다.
결과값은 다음 중 하나의 상수로 전달된다.
퍼미션을 거부한 상태라면 사용자에게 해당 퍼미션을 허용해 달라고 요청해야 한다.
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() 함수의 두 번째 매개변수로 등록한 콜백으로 전달된다.