Android 애플리케이션을 사용하고 있는데 문제가 있습니다. (나는 안드로이드 개발에 익숙하지 않다.)다음날 알람을 울리는 시간을 설정하는 방법은 무엇입니까?
나는 오늘 알람을 설정하고 싶다. 그 일을하지만, 내 문제는 시간 선택기에서 시간을 현재 시간보다 짧게 설정하고 싶을 때 즉시 내 경보가 울립니다. 나는 그 시간을 내일의 시간으로 정하고 싶다. 어떻게해야합니까?
Android 애플리케이션을 사용하고 있는데 문제가 있습니다. (나는 안드로이드 개발에 익숙하지 않다.)다음날 알람을 울리는 시간을 설정하는 방법은 무엇입니까?
나는 오늘 알람을 설정하고 싶다. 그 일을하지만, 내 문제는 시간 선택기에서 시간을 현재 시간보다 짧게 설정하고 싶을 때 즉시 내 경보가 울립니다. 나는 그 시간을 내일의 시간으로 정하고 싶다. 어떻게해야합니까?
알람을 설정하기 전에 시간 선택기의 결과를 확인하십시오. 나는 당신의 알람을 어떻게 세우고 있는지, 어떤 종류의 알람을 사용하고 있는지 정확히 알지 못한다. 나는 주어진 시간을 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 객체를 가져옵니다.
+1하지만 DST 변경시 예상대로 작동하지 않습니다. Joda Time 라이브러리 사용을 고려하십시오. –
Thx Donal - 잊어 버렸습니다. - DST를 처리하기 위해 편집했습니다. –
이름을 변경했는지 알 수는 없지만 2.1에서이 함수는 문제가있는 경우를 대비하여 "before()"가 아니라 "isBefore()"가 아닙니다. –
내 프로젝트에서 사용한 코드는 다음과 같습니다. 달력의 인스턴스를 얻은 다음 필요한 시간을 설정하고 실제 시간 값과 비교합니다. 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);
경보를 설정하는 데 사용하는 코드를 표시하십시오. – Femi