我正在做一個Android應用程序,我有一個問題。 (我是Android開發新手。)如何設置第二天的鬧鐘時間?
在我的應用程序中,我想爲今天設置鬧鐘。它適用於此,但我的問題是當我想從時間選擇器中設置時間小於當前時間時,我的鬧鐘立即響起。我想把時間設定爲明天的時間。我怎麼做?
我正在做一個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 */
}
還有很多其他的方法可以做到這一點,但我覺得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區域)獲取特定時區中的日曆對象。
+1,但請注意,在DST更改時這不會按預期工作。考慮使用喬達時間庫。 –
Thx Donal - 忘記了 - 我已編輯處理DST。 –
不知道他們是否改變了命名,但在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);
顯示您用於設置鬧鐘的代碼。 – Femi