본문 바로가기
Develop/Android

[Android] AlarmManager 정리

by 알려 2022. 3. 5.
728x90
반응형

매시 정각에 알림을 해줘야 할 요구사항이 들어와 AlarmManager를 사용해 보았다.

 

안드로이드 develop사이트를 참고하였으며

https://developer.android.com/training/scheduling/alarms

 

반복 알람 예약  |  Android 개발자  |  Android Developers

반복 알람 예약 알람(AlarmManager 클래스 기반)을 사용하면 애플리케이션이 사용되지 않을 때 시간 기반 작업을 실행할 수 있습니다. 예를 들어, 알람을 사용하여 일기예보를 다운로드하는 것과 같

developer.android.com

적용 후 현상/느낌? 에 대해서도 정리해보자

 

사용법은 간단하다. 

응답을 받을 브로드캐스트 리시버를 생성하고 AlarmManager를 통해 트리거 시간과 반복 시간 그리고 생성한 브로드캐스트 리시버를 세팅해하게 되면 끝이다.

 

브로드캐스트 리시버를 생성하고

class AlarmBroadCastReceiver : BroadcastReceiver() {
    override fun onReceive(p0: Context?, p1: Intent?) {
        //알람을 받아보자
    }
}

AndroidManifest에 등록한다.

<receiver android:name="com.normal.sample.AlarmBroadCastReceiver"></receiver>

 

그리고 세팅을 원하는 위치에 하기와 같이 반복 알람 설정을 하면 끝이다. 매우 간단하다.

나는 정각 알림을 구현하였기 때문에 트리거 타임을 현재시간 기준으로 다음 정각으로 하고 반복 시간을 INTERVAL_HOUR로 설정했다.

val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager
val triggerTime = Calendar.getInstance()
triggerTime.set(Calendar.HOUR_OF_DAY, triggerTime.get(Calendar.HOUR_OF_DAY) + 1)
triggerTime.set(Calendar.MINUTE, 0)
triggerTime.set(Calendar.SECOND, 0)
triggerTime.set(Calendar.MILLISECOND, 0)

val intent = Intent(this@MainActivity, AlarmBroadCastReceiver::class.java)
val pIntent = PendingIntent.getBroadcast(this@MainActivity, 0, intent, 0)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime.timeInMillis, AlarmManager.INTERVAL_HOUR, pIntent)

 

이러면 정각에 설정된 브로드캐스트로 알림이 올 것이다!

그래도 테스트는 해봐야 되니 1시간을 계속 기다릴 수 없으니 1분마다 0초에 한 번씩 알림이 오도록 설정을 해서 테스트를 해봤다

 

하지만 잘 안 맞는다 내가 뭘 잘못한 건가 하고 이리저리 찾아봤는데 아래와 같이 디벨롭 사이트에는 하기와 같이 설명이 나와있다.

 

 

그럼 정밀하지 않게 1시간에 1번은 잘되는 건가 하고 적용해보려고 했는데

몇 시간을 테스트를 해볼 수는 없어서 다른 방법을 써서 요구사항을 적용했고 ACTION_TIME_TICK이라는 인텐트 필터로 브로드캐스트를 이용해서 적용하였다 그 부분과 관련된 내용은 다음에..

 

1시간에 1번 결과는 밤에 한번 돌려보고 잘못 구현된 부분이 있나 좀 더 확인해 보고 추가적인 내용이 있으면 올리도록 하겠음.

※추가사항 

1시간에 1번씩 돌려봤는데 잘 안맞는다.  더 검토해봐야겠다. 끝

728x90
반응형

댓글