본문 바로가기

프로그래밍/Android

Android12 정확한 알람 - SCHEDULE_EXACT_ALARM vs USE_EXACT_ALARM

Android 12 부터 앱에서 정확한 알람(EXACT ALARM)을 사용하는 경우에 필요한 Permission 이 추가되었다. 

(정확한 알람이란 AlarmManger 를 사용하여 특정한 시각(ex. 00시00분)에 알람을 예약하고, 그 이후의 동작을 예약하는 것을 말한다.)

정확한 알람을 사용하여 개발중인 경우 아래 권한이 필수적인데, 헷갈리는 부분이 있어 정리해보았다. 

 

SCHEDULE_EXACT_ALARM

이 권한은 앱이 정확한 알람을 사용할 수 있게 한다. 사용자나 시스템이 철회할 수 있늩 특수한 접근권한이고, 정확한 알람을 사용하는 경우에만 추가하면 된다.

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)을 유지해야한다. 

 

USE_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