안드로이드 AlarmManager 이용하여 설정 시간대에 알람 울리게 하기
조회수 10670회
//alarmBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(DialogActivity3.this, AlarmDialogActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(DialogActivity3.this, 0, intent, 0);
// 1회 알람 시작
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 4500, pIntent);
}
});
}
일단 이렇게 버튼을 누르면 4.5초뒤에 설정해놓은 다른 액티비티가 뜨게끔 만들었습니다.
timepicker 같은걸로 시간을 설정하면.. 핸드폰 시간과 연동되서 그 시간에 알람이 울리게 하고싶습니다..
setTimeZone 함수를 사용하면되는건가요?
아니면 다른 방법인가요?
구글링해서 예제를 봐도 시간설정해서 실제로 그시간에 울리게하는건 없네요..
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
AlarmManager.set()
함수의 두번째 파라미터가 알람이 트리거 되는 시간입니다. 예를 들어서 2016년 9월 1일 오전 8시에 알람이 트리거 되게하고 싶다면 작성하신 코드에서 다음을 추가하면 됩니다.Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2016); calendar.set(Calendar.MONTH, Calendar.SEPTEMBER); calendar.set(Calendar.DATE, 1); calendar.set(Calendar.HOUR_OF_DAY, 8); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
위 예시에서는 Calendar로 알람 시간을 직접 설정했지만 TimePicker를 이용해서 사용자가 직접 시간을 설정하고, 설정된 시간을 가져오는 부분만 추가하면 만들고자 하는 기능을 어렵지 않게 구현 할 수 있습니다.
참고로 API 19부터 배터리 효율을 위해
AlarmManager.set()
함수는 정확한 시간에 알람이 동작하지 않을 수 있습니다. 정확한 알람이 필요할 경우, API 19 이상에서는 setExact() 함수를 사용하세요. 관련된 내용은 아래 페이지에서 set() 함수 부분을 참고하시기 바랍니다.-
(•́ ✖ •̀)
알 수 없는 사용자 -
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
- 질문자는 아닌데, 혹시 질문하나 해도 될까요? 제가 Calendar객체에 set함수로 년/월/일/시/분/초를 설정해 setRepeating을 했는데요, 시간이 오전 8시라고 하면 오후 8시(20시)에도 알람이 울립니다. 혹시 24시간 계산법에서도 AM/PM 도 설정을 따로 해줘야 하나요? hee 2016.8.26 02:38
- HOUR_OF_DAY로 설정할 경우, AM/PM 설정은 하지 않아도 됩니다. setRepeating()을 사용하셨다고 하셨는데, setRepeating() 함수의 세번째 파라미터가 알람을 반복하는 주기입니다. 이 값이 12시간으로 설정되어 있는 것은 아닌지 확인해보세요. 알 수 없는 사용자 2016.8.26 02:49
- alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 라고 적었습니다. cal이 Calendar 변수에요. INTERVAL_DAY는 1000*60*60*24에 해당하는 상수값이더라구요.. hee 2016.8.26 14:07
- calendar.currentTimeMillis() 는 없는 메소드네요... 혹시 System.currentTimeMillis()와 헷갈리신거 아닌지요 ㅠㅠ calendar.getTimeInMillis()로 해야되지않나요?? 알 수 없는 사용자 2016.8.26 14:25
- @Jun Yong Lee 코드를 입력창에서 그냥 작성하다보니 실수를 했네요. 말씀하신 getTimeInMillis()가 맞습니다. 알 수 없는 사용자 2016.8.26 14:37
- @hee INTERVAL_DAY이면 24시간 뒤에 트리거 될 것 같은데 이상하네요. ^^;; 알 수 없는 사용자 2016.8.26 14:38
- @한로니로니 마지막으로 한 가지만 더 여쭙겠습니다.. 위에 적어주신대로 calendar를 set하고 Date date = calendar.getTime(); 로 로그를 찍어보니 8시가 안찍히고 17시로 찍힙니다.. 몇시간 오차가 있는거 같은데 이건 어떻게 수정해야하나요? I/로그찍기: Fri Aug 26 17:00:00 GMT+09:00 2016 이렇게 찍히네요... 8월 26일은 제가 일부러 수정한 부분이 맞습니다 알 수 없는 사용자 2016.8.26 14:46
-
댓글 입력