
Android 특정 시간 알람 설정 AlarmManager 사용하기
안드로이드에서 특정 시간에 작업을 예약하거나 반복 실행해야 하는 경우가 많습니다. 예를 들어, 알람을 설정하거나 정기적인 데이터 동기화를 수행할 때 AlarmManager를 활용할 수 있습니다.
이번 포스팅에서는 AlarmManager의 개념, 설정 방법, 사용법, 그리고 고려해야 할 사항까지 자세히 설명하겠습니다.
1. AlarmManager란?
AlarmManager는 지정한 시간에 특정 작업을 실행할 수 있도록 예약하는 안드로이드 시스템 서비스입니다. 배터리 절약을 고려하면서도 백그라운드에서 일정 작업을 실행할 수 있습니다.
주요 기능
- 정확한 시간에 작업 실행 가능
- 주기적인 반복 실행 지원
- 시스템 재부팅 후에도 유지 가능 (BOOT_COMPLETED 브로드캐스트 필요)
- 절전 모드에서도 동작 가능 (setExactAndAllowWhileIdle() 활용)
2. AlarmManager 설정하기
권한 추가 (재부팅 후 알람 유지)
AndroidManifest.xml 파일에 RECEIVE_BOOT_COMPLETED 권한을 추가하면 시스템이 재부팅된 후에도 알람이 유지됩니다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3. AlarmManager 기본 사용법
1) 알람 리시버(BroadcastReceiver) 생성
AlarmManager는 BroadcastReceiver를 통해 알람 이벤트를 처리합니다.
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
Log.d("AlarmManager", "알람이 울렸습니다!")
}
}
2) 알람 설정 및 등록
AlarmManager를 사용하여 특정 시간 후에 알람을 등록하는 코드입니다.
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
val triggerTime = System.currentTimeMillis() + 60000 // 1분 후 실행
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent)
4. 반복 알람 설정하기
주기적으로 실행되는 알람을 등록하려면 setRepeating 메서드를 사용할 수 있습니다.
val repeatInterval = AlarmManager.INTERVAL_HALF_HOUR // 30분 간격
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, repeatInterval, pendingIntent)
5. 부팅 후 알람 유지하기
재부팅 후에도 알람을 유지하려면 BOOT_COMPLETED 브로드캐스트를 받아야 합니다.
1) BootReceiver 생성
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
if (intent?.action == Intent.ACTION_BOOT_COMPLETED) {
Log.d("AlarmManager", "부팅 완료, 알람을 다시 설정합니다.")
// 여기에 알람 재설정 코드 추가
}
}
}
2) AndroidManifest.xml에 등록
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
6. 알람 취소하기
등록된 알람을 취소하려면 cancel() 메서드를 사용합니다.
alarmManager.cancel(pendingIntent)
7. AlarmManager 사용 시 고려해야 할 점
- setExact() vs set(): set()은 시스템이 최적의 실행 시간을 조정하지만,
setExact()
는 정확한 시간에 실행됩니다. - 절전 모드 고려: Doze 모드에서는 setExactAndAllowWhileIdle()을 사용해야 합니다.
- 재부팅 후 알람 유지: BootReceiver를 통해 재설정해야 합니다.