如何在Android应用中为第二天的闹钟设置时间?

use*_*704 3 android

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

在我的应用程序中,我想为今天设置闹钟.它适用于此,但我的问题是当我想将时间选择器的时间设置为小于当前时间时,我的警报立即响起.我想为明天的时间设定时间.我怎么做?

Chr*_*dus 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 */
}
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以做到这一点,但我发现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());
}
Run Code Online (Sandbox Code Playgroud)

您需要确保正确设置时区.以上代码将使用系统根据您的Android区域设置设置的默认时区.使用Calendar.getInstance(TimeZone区域)获取特定时区中的Calendar对象.