-
[Android]안드로이드 버전에 따른 AlarmManager 사용법Development/Android 2016. 9. 29. 22:58반응형
테스트 환경
안드로이드 버전
6.0.1
기기명(모델)
삼성 갤럭시노트4S-LTE(SM-N916L)
개발 툴
안드로이드 스튜디오 2.0
테스트 날짜
2016. 9. 29.
pIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if(Build.VERSION.SDK_INT >= 23)
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setTime.getTimeInMillis(), pIntent);
else {
if(Build.VERSION.SDK_INT >= 19) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, setTime.getTimeInMillis(), pIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, setTime.getTimeInMillis(), pIntent);
}
}마쉬멜로(SDK 23)부터는 Doze모드가 있어 디바이스가 잠들어버리면 알람매니저가 먹히지 않는다.
안드로이드에서는 Doze에서도 깨울 수 있는 setExactAndAllowWhileIdle와 setAndAllowWhileIdle를 내놓았지만 setRepeating은 없었다
setInexactRepeating은 뭔가 싶었지만 이건 아닌듯했다
이럴 땐 그냥 알람이 처음 먹혔을때 onReceiver()에서 이전 알람이 작동한 뒤 이전알람을 해제하고, 다시 알람을 설정하게 되면 무한 반복이 될 것이다!
추가 팁으로 요일 반복 시 알람설정은 다음과 같다.
//요일반복이 존재할 경우
if(extra.getBooleanArray("day_of_week") != null)
{
//오늘이 알람이 울리는 요일이 아니면 24시간 뒤 다시 알람을 생성시키고 리턴합니다.
if (!dayOfWeek[cal.get(Calendar.DAY_OF_WEEK)]) {
//알람이 24시간 뒤에 울리는 소스 입력
}
return;
}
}아 물론 현재 시간이 오후 8시이고, 설정한 시간이 다음날 오후 4시. 즉 현재보다 과거시간일 경우 다음과 같이 셋팅해줘야한다.
if(setTime.getTimeInMillis() < System.currentTimeMillis()) setTime.add(Calendar.DAY_OF_YEAR, 1);
개발된 앱 정보 보기 : http://citynetc.tistory.com/146
앱 다운로드 : https://play.google.com/store/apps/details?id=com.handykim.nbit.everytimerfree
반응형'Development > Android' 카테고리의 다른 글
[안드로이드]커스텀 다이얼로그 해상도 비율에 맞게 크기 조절하기 (0) 2017.09.29 [Android]안드로이드 - 앱을 설치할 수 없음 505에러 뜨는 원인 (0) 2016.12.24 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 라인) (0) 2016.12.23 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 인스타그램 링크) (9) 2016.12.23 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 트위터 링크) (1) 2016.12.22 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 페이스북 링크) (6) 2016.12.21 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 카카오링크) (2) 2016.12.20 [Android]SQLite db에 이미지(비트맵,Drawable) 저장(읽기,쓰기) 하는 법 (3) 2016.11.03 [Android]디바이스 화면 켜기 (0) 2016.09.29 [Android]ViewPager 내부 Fragment와 ListView, Item 갱신하기 (17) 2016.06.10