Android 알람매니저(AlarmManager) 사용시 설정한 시간이 아닌데 알람이 오는 경우에 대한 처리방법
알람매니저(AlarmManager) 사용시 설정한 시간이 아닌데 알람이 오는 경우에 대한 처리방법
매일 아침 9시에 알람이 오도록 하였다.
인터벌 간격을 AlarmManager.INTERVAL_DAY 설정하였으나 무색하게도
하지만 앱을 시작하면 바로 알람이 오는 경우가 발생하였다.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis()); // 휴대폰 시스템 시간 기준으로…
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Log.d(AppSetting.TAG, AlarmManage.class.getSimpleName() + ” : 예약시간: ” + new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(calendar.getTime()));
Calendar 클래스의 after()메소드를 사용하여
설정한 시간과 현재 시간을 비교하여 현재시간이 설정시간보다 이후인가를 true, false로 반환한다.
if (Calendar.getInstance().after(calendar)) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);
// 알람타입
// RTC UTC : 표준시간을 기준(우리가 사용하는시간)
// RTC_WAKEUP UTC : 표준시간을 기준, 장치를 깨움
// ELAPSED_REALTIME : 부팅 후 시간을 기준으로 시간 측정
// ELAPSED_REALTIME_WAKEUP : 부팅 후 시간을 기준으로 시간 측정, 장치를 깨움
// AlarmManager.RTC : 실제 시간을 기준.
// AlarmManager.RTC_WAKEUP : RTC와 동일하며, 대기 상태일 경우 단말기를 활성 상태로 전환한 후 작업을 수행.