如何设置第二天的闹钟时间?

问题描述:

我正在做一个Android应用程序,我有一个问题。 (我是Android开发新手。)如何设置第二天的闹钟时间?

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

+0

显示您用于设置闹钟的代码。 – Femi

只需在设置警报之前检查时间选择器的结果。我不确定你的闹钟设置是怎样的,或者你甚至使用了什么样的闹钟,我会假设给你一个毫秒的时间,你可以解决它。

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 Locale设置设置的默认时区。使用Calendar.getInstance(TimeZone区域)获取特定时区中的日历对象。

+0

+1,但请注意,在DST更改时这不会按预期工作。考虑使用乔达时间库。 –

+0

Thx Donal - 忘记了 - 我已编辑处理DST。 –

+0

不知道他们是否改变了命名,但在2.1中,函数是“before()”而不是“isBefore()”......以防有人遇到问题。 –

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

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);