Android 12 부터 앱에서 정확한 알람(EXACT ALARM)을 사용하는 경우에 필요한 Permission 이 추가되었다.
(정확한 알람이란 AlarmManger 를 사용하여 특정한 시각(ex. 00시00분)에 알람을 예약하고, 그 이후의 동작을 예약하는 것을 말한다.)
정확한 알람을 사용하여 개발중인 경우 아래 권한이 필수적인데, 헷갈리는 부분이 있어 정리해보았다.
이 권한은 앱이 정확한 알람을 사용할 수 있게 한다. 사용자나 시스템이 철회할 수 있늩 특수한 접근권한이고, 정확한 알람을 사용하는 경우에만 추가하면 된다.
TargetSdk 가 Android 12 (API 31 : Build.VERSION_CODES.S) 이상이고, 정확한 알람을 사용하는 경우에 이 권한을 필수로 추가해야한다. TargetSdk 가 그 이하의 버전일 경우 이 권한을 추가할 필요가 없다.
이 권한을 보유한 앱은 항상 WORKING_SET 상태를 유지한다.
(WORKING_SET : 앱이 최근에 사용되었거나 앞으로 몇 시간동안 사용될 가능성이 있는 앱이 들어가는 공간)
정확한 알람을 사용하는 것이 앱의 메인기능이고, TargetSdk 가 Android 13 (API 33 : Build.VERSION_CODES.TIRAMISU) 이상일 경우 USE_EXACT_ALARM 을 쓸 수 있다.
주기능이 아닌 서브기능으로 정확한 알람을 사용하는 경우도 이 권한(SCHEDULE_EXACT_ALARM)을 유지해야한다.
SCHEDULE_EXACT_ALARM 과 마찬가지로 정확한 알람을 사용할 경우 필요한 권한이지만, 이것은 정확한 알람을 핵심기능으로 사용하는 앱에서만 사용되어야 하는 권한이다.
정확한 알람을 사용하는 기능이 서브기능일 경우 SCHEDULE_EXACT_ALARM 권한을 사용해야한다.
USE_EXACT_ALARM 권한은 매우 강력한 권한으로 구글에서 이를 감시하고, 검토하기 위한 정책을 시행할 수도 있다. 정확한 알람을 오용하는 것으로 확인될 경우 앱이 제거될 수 있다. 앱의 TargetSdk 가 Android 13 (API 33 : Build.VERSION_CODES.TIRAMISU) 이상을 타게팅하는 경우 둘 중 하나의 권한만 사용한다.
이미 SCHEDULE_EXACT_ALARM 권한을 사용하고 있는데, 앱의 주요기능이 정확한 알람을 사용하여 USE_EXACT_ALARM 권한이 필요할 경우 아래처럼 maxSdkVersion 을 명시한다.
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"
android:maxSdkVersion="32" />
Android 13 새로운 기능 문서에 추가된 정확한 알람의 권한에 대한 내용 (링크)
정확한 알람을 사용하는 경우 USE_EXACT_ALARM 권한을 사용할 수 있다. 그러나 앱이 타이머 앱이거나, 일정에 대한 알림을 표시하는 캘린더 앱일 경우에만 사용해야한다. 그 외의 경우에는 SCHEDULE_EXACT_ALARM 권한을 계속 선언하고 사용자가 앱 액세스를 거부하는 상황에 대비해야 한다.
결론
- Android 12 이상부터 정확한 알람을 사용하는 경우 추가할 수 있는 권한이 2개 있다. (SCHEDULE_EXACT_ALARM, USE_EXACT_ALARM)
- 정확한 알람 기능이 앱의 주요기능일 경우 USE_EXACT_ALARM 를 사용한다. (타이머 앱이나 알림 캘린더 앱일 경우)
- 정확한 알람 기능이 앱의 서브기능일 경우 SCHEDULE_EXACT_ALARM 를 사용한다.
- 정확한 알람 권한을 추가한 경우 사용자가 앱 액세스를 거부하는 상황에 대해 처리해야한다.
사용자가 앱 액세스를 거부하는 상황에 대한 처리는 여기서 확인해주세요.
'프로그래밍 > Android' 카테고리의 다른 글
[Compose] Jetpack Compose Tutorial (0) | 2022.11.23 |
---|---|
[Compose] Jetpack Compose 시작하기 (0) | 2022.11.23 |
Android Architecture Overview (0) | 2022.05.29 |
위젯 1:1 크기 계산 (0) | 2021.12.30 |
Android Kotlin Fundamentals's Context (0) | 2020.10.20 |