2011-09-02 3 views
2

Android 애플리케이션을 사용하고 있는데 문제가 있습니다. (나는 안드로이드 개발에 익숙하지 않다.)다음날 알람을 울리는 시간을 설정하는 방법은 무엇입니까?

나는 오늘 알람을 설정하고 싶다. 그 일을하지만, 내 문제는 시간 선택기에서 시간을 현재 시간보다 짧게 설정하고 싶을 때 즉시 내 경보가 울립니다. 나는 그 시간을 내일의 시간으로 정하고 싶다. 어떻게해야합니까?

+0

경보를 설정하는 데 사용하는 코드를 표시하십시오. – Femi

답변

16

알람을 설정하기 전에 시간 선택기의 결과를 확인하십시오. 나는 당신의 알람을 어떻게 세우고 있는지, 어떤 종류의 알람을 사용하고 있는지 정확히 알지 못한다. 나는 주어진 시간을 millis로 가정 할 것이다.

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
    Calendar now = Calendar.getInstance(); 
    Calendar alarm = Calendar.getInstance(); 
    alarm.set(Calendar.HOUR_OF_DAY, hourOfDay); 
    alarm.set(Calendar.MINUTE, minute); 
    long alarmMillis = alarm.getTimeInMillis(); 
    if (alarm.before(now)) alarmMillis+= 86400000L; //Add 1 day if time selected before now 
    setAlarm(alarmMillis); 
} 

public void setAlarm(long millis) { 
    /** Set your alarm here */ 
} 

이렇게하는 데는 여러 가지 방법이 있지만 캘린더 클래스는 일반적으로 초보자를위한 시간 조정에 좋습니다. 희망이 도움이됩니다.

편집 : DST이 필요한 경우, 작은 편집이 문제가 해결됩니다 : 당신은 시간대가 올바르게 설정되어 있는지 확인해야합니다

public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
    Calendar now = Calendar.getInstance(); 
    Calendar alarm = Calendar.getInstance(); 
    alarm.set(Calendar.HOUR_OF_DAY, hourOfDay); 
    alarm.set(Calendar.MINUTE, minute); 
    if (alarm.before(now)) alarm.add(Calendar.DAY_OF_MONTH, 1); //Add 1 day if time selected before now 
    setAlarm(alarm.getTimeInMillis()); 
} 

합니다. 위의 코드는 Android 표준 설정에 따라 시스템에서 설정 한 기본 표준 시간대를 사용합니다. Calendar.getInstance (TimeZone zone)를 사용하여 특정 시간대의 Calendar 객체를 가져옵니다.

+0

+1하지만 DST 변경시 예상대로 작동하지 않습니다. Joda Time 라이브러리 사용을 고려하십시오. –

+0

Thx Donal - 잊어 버렸습니다. - DST를 처리하기 위해 편집했습니다. –

+0

이름을 변경했는지 알 수는 없지만 2.1에서이 함수는 문제가있는 경우를 대비하여 "before()"가 아니라 "isBefore()"가 아닙니다. –

0

내 프로젝트에서 사용한 코드는 다음과 같습니다. 달력의 인스턴스를 얻은 다음 필요한 시간을 설정하고 실제 시간 값과 비교합니다. 0보다 작은 경우 (과거)에 하루를 추가합니다. 희망이 도움이됩니다.

Calendar c = Calendar.getInstance(); 
    c.set(Calendar.HOUR_OF_DAY, hour); 
    c.set(Calendar.MINUTE, minute); 
    c.set(Calendar.SECOND, second); 
    long timeInMillis = c.getTimeInMillis(); 
    if(timeInMillis-System.currentTimeMillis()<0){ 
     //if its in past, add one day 
     timeInMillis += 86400000; 
    } 
    //for instance start repeating intent 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent); 
관련 문제