[Android] 정확한 시간의 알람 구현

제이제이·2023년 8월 23일
0

Android 알람

목록 보기
2/2
post-thumbnail

이번 글에서는 정확한 시간의 알람을 구현 해보겠습니다.

※ SCHEDULE_EXACT_ALARM 권한이 Android 13 이상을 대상으로 새로 설치된 대부분의 앱에서 더 이상 사전 부여 되지않는 이슈가 생겼습니다.

1. 레이아웃 및 패키지

레이아웃 및 패키지 구성은

  • activity_main.xml
  • MainActivity
  • AlarmReceiver


메인 화면 레이아웃은 위와 같습니다.
동작원리는 TimePicker에서 원하는 시간을 정하고 알람 설정 버튼을 누르면 그 시간에 알람이 울리는 방식입니다.

2. MainActivity

2-1. onCreate()

alarmManger 객체를 생성하고 alarmManger.canScheduleExactAlarms()를 통해 앱이 적절한 권한이 있는지 확인합니다.

2-2. onResume()

버튼을 클릭하면 현재 TimePicker에 설정된 시간과 분을 각각 hour, min 변수에 저장합니다.
그리고 TextView에 설정 시간을 나타내도록 합니다.
setAlarm 메서드를 통해 알람을 설정 합니다.

2-3. setAlarm()

설정한 시간과 분을 각각 hour, min으로 받아와서 calendar 객체를 생성하고
calendar 객체의 시간과 분에 hour, min으로 지정합니다.
alarmManager를 통해 설정된 calendar 시간으로 pendingIntent를 보내 알람을 설정합니다.

intent를 AlarmReceiver로 넘겨줄 수 있도록 합니다.
이때 intent는 그냥 intent가 아닌 pendingIntent입니다.

PendingIntent는 특정 시간에서의 이벤트를 수행하기 위한 intent입니다.

pendingIntent는 getBroadcast로 인텐트를 보내게 되는데
알아야할 매개변수는 requestCode와 flags입니다.

참고로 Pendingintent 이슈가 있어 PendingIntent.FLAG_IMMUTABLE 사용을 권고 드립니다.

setAlarmClock을 사용하는 이유
이전 글에서 3번 내용인 알아야 할 점에 설명이 적혀있으니 참고 바랍니다.
setAlarmClock를 왜 사용할까

3. AlarmReceiver

3-1. 이벤트 발생을 위한 BroadcastReceiver
넘겨받은 PendingIntent로부터 이벤트를 실행시키기 위한 AlarmReceiver입니다.
알람은 벨 소리 대신 현재 시간을 알려주는 TTS 음성으로 구현했습니다.

3-2. 알람 발생
사용자가 설정했던 원하는 시간에 현재 시간을 출력과 동시에 TT S음성이 나오도록 했습니다.

4. Manifest

4-1. Manifest 설정
정확한 시간의 알람을 위해선 퍼미션 추가가 필요합니다.

또 Receiver 사용 정의도 필요합니다.

마지막으로

영상을 첨부하여 TTS 음성이 나오는 걸 올리고 싶었으나 영상은 첨부가 안 되어 직접 해보시면 음성이 잘 나오는 것을 확인하실 수 있습니다.
참고로 어플을 종료 및 대기모드 상태(휴대폰 화면 끈 상태)에서도 TTS 음성이 나옵니다.

아래 사진은 알람이 울릴 때 토스트 메시지가 나오는 것을 확인할 수 있습니다.

참고자료
Alarm GitHub

0개의 댓글