[출처] : 

http://blackzaket.blog.me/80113159648


Android에서는 기본적으로 AlarmManager를 제공하는데..

특정 작업을 Manager에 등록해 두면 알아서 등록한 intent를 깨우준다.

 

AlarmManager am = (AlarmManager)con.getSystemService(Context.ALARM_SERVICE);

 

//RealTime으로 예약하는 경우

//반복의 경우

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, pi);

//한번의 경우

am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);

 

//부팅경과 시간으로 계산하는 경우

ELAPSED_WAKEUP

 

 

주의 사항

간단하게 2가지의 주의 사항이 있는데

1. AlarmManager에 등록되어진 Alarm의 경우 단말이 재부팅을 하게 되면 깨끗하게 최기화 되어진다.

2. calendar 또는 date로 시간을 Set할때 현재 시간에 기준하여 알람 시간이 내일인지 오늘인지를 잘 계산해야 한다. (뭔지 모르고 엄청난 삽질을;;;;)

 

1번의 해결 방법으로는 Intent-filter를 이용하는 방법이 있는데...

알람을 초기화 하는 Activity에 다음과 같은 intent-filter를 달아주는것이다.

 

<action android:name="android.intent.action.BOOT_COMPLETED" />

 

intent에서는 getAction과 같은 값으로 Intent를 구분할 수 있다.

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST