我正在创建一个Android应用程序,我遇到了问题。(我是Android开发的新手)
在我的应用程序中,我想为今天设置闹钟。它适用于此,但我的问题是当我想从时间选择器设置时间小于当前时间时,我的警报立即响起。我想为明天的时间设定时间。我该怎么做?
答案 0 :(得分:17)
在设置闹钟之前,只需检查时间选择器的结果。我不确定你如何设置你的闹钟,或者你甚至使用什么样的闹钟,我会假设在毫秒时间你可以解决它。
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 */
}
还有很多其他方法可以做到这一点,但我发现Calendar类通常适合初学者的时间操作。希望这会有所帮助。
编辑: 如果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区域)获取特定时区中的Calendar对象。
答案 1 :(得分: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);