2014-02-28 59 views
1

我有一個帶有RTC鬧鐘的應用程序。目前,我在每天早上8點設置鬧鐘。我的問題是,當警報開始時(下午4點)說,它會考慮過去的開始時間(上午8點),因此會運行。如何防止鬧鐘在啓動時運行時間過長

我希望鬧鐘只能在上午8:00左右運行,但如果在一天晚些時候啓動,則不會運行。任何想法如何?

回答

3

我建議你使用calendar.add(Calendar.DAY_OF_YEAR, 1);

研究下面的代碼:

Calendar calendar = Calendar.getInstance(); 
// 9 AM 
calendar.add(Calendar.DAY_OF_YEAR, 1); ///to avoid firing the alarm immediately 
calendar.set(Calendar.HOUR_OF_DAY, 9); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 
PendingIntent pi = PendingIntent.getService(context, 0, 
      new Intent(context, MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
           AlarmManager.INTERVAL_DAY, pi); 

Original Source

+0

聰明的想法,但你肯定的是,如果代碼ü晚上11:00寫道運行,它上午9:00還會被稱爲早上?它只是添加1天給我的印象是它會延遲1天 –

+0

@MahmoudBadri是的,我100%確定,我已經測試過這一行代碼。 – Kedarnath

+0

好吧,我接受這個答案,因爲它更容易,雖然nikis的答案更準確,但在我的情況下,我想要更容易 –

1

您正在使用setInexactRepeatingsetRepeating,對吧?所以要處理這種情況,只需比較兩次:當前時間(毫秒)和(上午8:00,當天)(以毫秒爲單位)。如果第一次超過第二次,那麼你應該觸發你的鬧鐘(第二天上午8點),否則 - (上午8點,當天)。