如何在Android应用程序中设置第二天的报警时间?

如何在Android应用程序中设置第二天的报警时间?,android,Android,我正在创建一个Android应用程序,我遇到了一个问题。(我是Android开发新手) 在我的应用程序中,我想为今天设置闹钟。这是可行的,但我的问题是,当我想从时间选择器设置的时间小于当前时间时,我的警报会立即响起。我想把时间定在明天。如何操作?在设置警报之前,只需检查时间选择器的结果。我不确定你是如何设置闹钟的,或者你使用的是什么类型的闹钟,我假设给定一个毫秒的时间,你可以计算出来 public void onTimeChanged(TimePicker view, int hourOfDay

我正在创建一个Android应用程序,我遇到了一个问题。(我是Android开发新手)


在我的应用程序中,我想为今天设置闹钟。这是可行的,但我的问题是,当我想从时间选择器设置的时间小于当前时间时,我的警报会立即响起。我想把时间定在明天。如何操作?

在设置警报之前,只需检查时间选择器的结果。我不确定你是如何设置闹钟的,或者你使用的是什么类型的闹钟,我假设给定一个毫秒的时间,你可以计算出来

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)获取特定时区中的Calendar对象。

以下是我在项目中使用的代码。我得到日历的实例,然后设置所需的时间,并将其与实际时间值进行比较,若它小于零(过去),我会向它添加一天。希望能有帮助

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);
Calendar c=Calendar.getInstance();
c、 设置(日历小时/天,小时);
c、 设置(日历、分钟、分钟);
c、 设置(日历。秒,秒);
long-timeInMillis=c.getTimeInMillis();

如果(TimeMimLIS Surviv.TimeTimeMILLISH)显示你正在使用的设置闹钟的代码。+ 1,但是要注意,在DST的变化中,这不会像预期的那样工作。考虑使用JoDA时间库。THX DAONE——忘记了-我已经编辑了处理DST。不确定它们是否改变了命名,但是在2.1中,函数是“前”(而不是“前”)。…以防有人对此有问题。更正了isBefore()>before()。是从内存写入的,所以可能只是假设一个返回以“is”开头的布尔值的方法