마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

알람매니저 미리알림 기능을 구현하려고 합니다. [closed]

0 추천
예를 들어 알람이 수요일 자정에 울려야 하고, 미리 알림 시간이 3분 전이라고 가정했을 경우, 화요일 밤 11시 57분에 미리알림이 울려야합니다.

여기서 조건을 어떻게 주어야 할지 모르겠습니다 ㅠㅠ

if((알람예정시간-미리알림시간)) == 알람예정시간 전날일 때) 이렇게 조건을 줘야할 것 같은데 소스로 못 풀어내겠습니다 ㅠㅠ 아직 초짜라 많이 부족합니다..

도와주시면 감사하겠습니다!
질문을 종료한 이유: 미리 알림시간이 최대 1시간이라 가정했을 때 내일이 알람이 울리고, 알람셋팅시간이 00:00~00:59, 알람셋팅-미리알림 시간이 23:00~23:59일 때를 조건으로 해주어서 해결함
핸디 (1,840 포인트) 님이 2016년 10월 25일 질문
핸디님이 2016년 10월 27일 closed

1개의 답변

0 추천

조건이 굳이 필요할까요

 

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(알람이 울려야할 밀리세컨드);
cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE) - 3);
long 3분전밀리세컨드 = cal.getTimeInMillis();

 

AlarmManager 설정할떄 밀리세컨드 값으로 넣지 않던가요? 그럼 위처럼 밀리세컨드값 구해서 하시면 되실듯

Development Guy (70,570 포인트) 님이 2016년 10월 25일 답변
제가 추가내용을 안적었군요.

저는 요일반복을 setRepeating로 하지 않고 알람이 울리는 요일이 현재 요일과 일치할 경우에 알람을 작동하게 해두었습니다.
다음과 같이 말이죠..
 if(dayOfWeek[today.get(Calendar.DAY_OF_WEEK)])

그래서 요일 체크가 중요한데요. 미리알림이 하루 전날 울려야할 때는 알람이 울리는 요일이 아니므로 작동하지가 않습니다.. 그렇기 때문에 제가 질문을 드린것이구요 ㅠㅠ
setRepeating 이 아니라 그냥 set 이어도 triggertime으로 timeInMillisecond가 들어갈텐데요. 그리고 실제 알람과 3분전 미리 알람 둘다 AlarmManager에 set 하시면 될텐데 말씀하시는 조건이 왜 그리고 어디에 들어가야 하는지요??
알람은 매일마다 실행되고 있습니다.
매일마다 요일을 체크해서 알람이 울리는 날이면 알람을 울린 뒤 24시간 뒤 실행, 그렇지 않으면 1일(24시간)을 계속 추가하는 방식으로 되어있습니다.

알람시간과 미리알람시간을 함께 set하면 알람과 미리알림이 동시에 울리게 돼서 다음처럼 해놓았습니다
Alarm.create()  -> alarmReceiver -> alarmService
Alarm.create()  -> reminderReceiver -> reminderService

만약 제가 요청한 조건문이 없다면 알람이 울리지 않는 요일에도 매번 3분전에 미리알림이 작동된다는게 문제입니다 ㅠ 이 조건문은 Alarm.create()에 들어가야 하구요

제가 막힌 조건문 부분입니다.
사용자가 저장한 요일은 boolean[]에 저장됩니다.
미리알림이 전날에 울릴 경우 전날에도 true값을 주어 해당 알람을 실행시키려고 합니다.

if (????????) {
                for (int i = 0; i < dayOfWeek.length; i++) {
                    if (dayOfWeek[i]) {
                        if (i == 1) {
                            dayOfWeek[7] = true;
                        } else {
                            dayOfWeek[i - 1] = true;
                        }
                    }
                }
            }
int weekOfToday = getWeekOfToday();
int yesterday = weekOfToday == 1 ? 7 : weekOfToday -1;
if (dayOfWeek[yesterday]) {
   //24시간 후 알람 실행
} else {
   //알람에 1일 추가
}
...