다른 앱 위에 표시 권한 설정을 위해, 앱 설정으로 이동 후 시스템 권한을 준 뒤 OnResume 상태에서Settings.canDrawOverlays(context) 를 통해 권한 변화를 감지하려고 하였다.
하지만 이상하게도 권한을 주었음에도 False 가 나오길래, 내 디바이스 기기에서 테스트해보니 이건 또 정상 동작하였다.
확인해보니 내 디바이스 기기 [SDK 35] 에서는 true 가 잘 나오는 반면, [SDK 26] 의 에뮬레이터에서는 무조건 false 만 나왔다.
이에 대해 GPT 에게 물어보니 다른 앱 위에 표시 권한의 경우 다른 권한과는 달리 특수 권한으로 판단되어 내부적으로 AppOps 라는 별도 관리값을 가지는데, 이것이 Android 8 (SDK 26) 버전에서 버그가 존재한다고 한다.
실제로 https://stackoverflow.com/questions/46173460/why-does-settings-candrawoverlays-method-in-android-8-returns-false-when-use 를 확인해보니 8.1 (SDK 27) 부터 수정되었다고 한다.
즉, SDK 26 을 사용한다면 동일한 버그가 발생한다는 소리...
만약 SDK 26 에서 이를 해결하고 싶다면
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
onresume++
}
LaunchedEffect(onresume) {
delay(1000L)
viewModel.onEvent(PermissionUiEvent.RefreshPermissionState)
}
와 같이 딜레이를 주는 수밖에 없는 것 같다.