반응형
자주 사용하기 때문에 검색안하고 긁어 쓰려고 포스팅 합니다...!
순서
1. 설정창 여는 퍼미션
2. 설정창 필요없이 팝업으로 획득하는 퍼미션
1. 설정창을 열어야 하는 system alert window의 경우
var ovelayPermission = Settings.canDrawOverlays(this)
val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:$packageName"))
val activityLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
ovelayPermission = Settings.canDrawOverlays(this)
if(!ovelayPermission){
Toast.makeText(this,"권한이 없어 앱을 종료합니다.",Toast.LENGTH_SHORT).show()
finish()
} else {
//권한 획득시 수행할 작업
}
}
if(!ovelayPermission){
activityLauncher.launch(intent)
}
설정창을 열어서 권한을 획득해야 하므로, 해당 application의 해당 설정으로 이동할 수 있는 intent가 필요하다.
하단의 if문으로 정의한 Settings.canDrawOverlays가 false면 intent를 실행하고,
intent의 결과를 activityLauncher로 작업아서 권한 획득 여부에 따른 작업을 분기할 수 있다.
참고로 system alter window permission의 경우 api 29까진 해당 앱에서 간편히 클릭한번으로 설정가능하지만,
api 30 이후부턴 모든 앱이 나열되어 있는 overlay setting 창에서 앱을 찾아서 허용해주어야 한다.
[참
manifest : SYSTEM_ALERT_WINDOW
Intent : ACTION_MANAGE_OVERLAY_PERMISSION
Setting : Settings.canDrawOverlays(Context)
2. popup으로 허용이가능한 READ_PHONE_NUMBERS permission의 경우
var permissions =
arrayOf(
Manifest.permission.READ_PHONE_NUMBERS
)
val permissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
isGranted: Boolean ->
if(!isGranted){
Toast.makeText(this,"전화번호 읽기 권한이 없다면 앱이 정상적으로 동작하지 않습니다.", Toast.LENGTH_SHORT).show()
} else {
//허용시 수행할 작업 입력
}
}
}
for (permission in permissions){
permissionLauncher.launch(permission)
}
권한을 획득할 permission들을 배열로 유지해 permissionLuncher를 실행시켜 허용여부를 확인한다.
해당 퍼미션이 없다면 허용하라는 팝업창을 띄우게 되며, 있다면 바로 else구문으로 넘어가게 된다.
반응형
'IDE & Framework > Android' 카테고리의 다른 글
[JAVA] Base64 incoding, decoding (0) | 2022.01.06 |
---|---|
[Kotlin] InCallService로 Default Dialer 개발하기 (4) | 2021.12.19 |
[Kotlin] Fragment (2) - 기초 예제 (0) | 2021.12.19 |
[Kotlin] Fragment (1) - Introduce (0) | 2021.12.12 |
[Kotlin] WorkManager 사용해보기 (0) | 2021.11.09 |