<permission>
: 보호하려는 앱의 manifest 파일에 설정<uses-permission>
: 기능을 사용하려는 앱의 manifest 파일에 설정 <permission android:name="com.example.permission.TEST_PERMISSION"
android:label="Test Permission"
android:description="Permission Desc"
android:protectionLevel="dangerous"></permission>
<activity
android:name=".MainActivity"
android:permission="com.example.permission.TEST_PERMISSION"
android:exported="true"
>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
tools:ignore="CoarseFineLocation" />
API 레벨 23 이전에는 모두 신고제 ( 어떤 권한을 사용하는지 사용자에게 통보 )
API 레벨 23 부터는 모두 사용 허가제로 변경
앱을 실행할 때마다 해당 기능을 허용하였는지 직접 확인해줘야 한다.
처음 앱 설치할 경우 모든 권한 거부 상태
checkSelfPermission()
함수를 통해 권한 획득 여부를 확인한다.
val status = ContextCompat.checkSelfPermission(this, "android.permission.ACCESS_FILE_LOCATION")
if(status == PackageManager.PERMISSION_GRANTED){
Log.d("lumineko", "granted")
}else{ //PackageManager.PERMISSION_DENIED
Log.d("lumineko", "denied")
}
ActivityResultLauncher
를 통해 사용자에게 권한 요청을 할 수 있다. val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){
isGranted ->
if (isGranted){
Log.d("lumineko", "granted callback")
}else{
Log.d("lumineko", "denied callback")
}
}
requestPermissionLauncher.launch("android.permission.ACCESS_FINE_LOCATION")
// 해당 권한 요청 런처를 실행한 후 결과값에 따라 isGranted값이 달라진다.