안드로이드

[Android] 로컬 알람 적용 방법

코딩하는후운 2024. 11. 14. 18:13
반응형

안드로이드 로컬 알람을 적용하게 되었습니다.

- 로컬알림 설정 후 정해진 알림이 브로드캐스트를 통해 onReceive가 되면 Notification을 띄워주는 작업

적용하면서 알아 보았던 정보를 정리 해보려 합니다.

 

1. 알림 설정

알림 설정을 하기 위해 AlarmManager를 이용 했습니다.

기본알람(set, setRepeat) VS 정확한 알람(setExactAndAllowWhileIdle)

  • 알람 - 특정 시간에 이벤트를 받기 위하여 스케쥴링을 걸어놓는 작업
  • 노티피케이션 - 사용자가 UI로 디바이스 알림 목록 등에서 확인할 수 있도록 띄워주는 뷰의 개념
  • 정확한 알람
    • Doze모드 등 특정 상황에서도 정확한 시간에 울리게할 수 있다.
    • OS12이상에서는 앱 설정 > 리마인더 설정 옵션에 따라 알람이 on/off 된다.
  • 기본 알람
    • Doze모드 등 특정 상황에 알람이 정확하게 울리지 않는다.
    • 리마인더 옵션과 무관
  • 노티피케이션
    • 논의했던 알람 권한 (채널, 시스템 알림 권한 모두 포함) on/off 에 따라 뜨거나 뜨지 않는다.
  기본 알람 정확한 알람
전원 OFF 알람 등록 가능, 필요 권한 없음 리마인더 OFF시 알람 등록 불가
전원 OFF 등록된 알람 삭제 등록된 알람 삭제
알람 울리기 알람 울리기 가능 이미 등록된 알람은 리마인더 옵션 OFF시에도 울림
노티피케이션 노출 앱 설정 > 알림 설정에 영향 앱 설정 > 알림 설정에 영향

setRepeat의 문제

트리거 시간과 반복시간이 맞물려 시스템에서 첫 번째 울릴 알람시간이 조정이 되는것 같다.
triggerAtMillis에 맞춰 정확히 울리는 것이 아니라 시스템에 의해 조정된 첫 반복 주기로 시작됩니다.
라고 하여 setRepeat를 사용 하기가 어렵다.
예) 
1. 알람 시간 : Wed Nov 13 13:59:00 GMT+09:00 2024, 반복주기 : 4분
첫번째 알림 시간 14:02:00
두번째 알림 시간 14:06:00

2. 알람 시간 : Wed Nov 13 14:58:00 GMT+09:00 2024, 반복주기 : 10분
첫번째 알림 시간 : 15:05:30
두번째 알림 시간 : 15:15:30

그래서 setRepeat이 아닌 set함수로 onReceive받으면 다음날 알림을 예약하여 매일 반복되게 작업 하였다.

 

2. 알림 권한

앱 설정 > 알림 설정이 OFF되어있을 때에는 알림 설정 못하게 하려 한다.

알림 권한 OS 13이상 (POST_NOTIFICATIONS)

  • 앱 디바이스 알림 설정과 동일하게 움직이니 따로 권한 확인 안해도 될 것 같다.

OS12 이상에서 알림 리마인더 설정 옵션이라는것도 있었음.
- 해당 옵션(권한)은 정확한 알람을 사용할 때 쓰인다. OFF되어 있으면 알림 설정이 안됨.

 

3. 브로드 캐스트 리시버

알림이 울릴 브로드 캐스트 리시버휴대폰 전원이 꺼졌다가 켜졌을 때 알림 재등록 할 브로드 캐스트 리시버 두개 사용 되었다.

휴대폰 전원이 꺼지면 등록했던 알림들이 전부 사라져서 재 등록하는 작업을 하였다.(내부 DB를 두어 활용)

백그라운드에서 재 등록도 해줘야해서 WorkManager를 이용하였습니다.

 

4. 테스트

실제 AlarmManager.set을 이용하였을 때 정확한 시간에 울리진 않았다. (정확한 알람이 아니라서)
테스트 하려고 디바이스 시간을 돌리면 더욱 정확한 시간에 오지 않음.(참고)

안드로이드 디바이스 시간을 임의로 조정하고 알림 테스트 할경우 오차가 생기는 이유

 

도움되길 바랍니다.

반응형