Android

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와 동일하며, 대기 상태일 경우 단말기를 활성 상태로 전환한 후 작업을 수행.

Leave a Reply

error: Content is protected !!