2016-09-27 61 views
1

我正在發出像用戶選擇的小時和分鐘的任何其他警報一樣激活的警報。當時間設定在0:00時,我發現問題立即激活警報。當時間設置爲0時即時調用警報

我有一個自定義AlarmManager在我稱之爲排定重複這樣的:

​​

而對於有問題的例子,這些值被傳遞:

Id = 619 
Hour = 0 
Minute = 0 

這是setRepeatingAlarm()功能:

public void scheduleRepeatingAlarm(Context context, int alarmID, int hour, int minute) { 
    System.out.println("schedule is running"); 
    Intent intent = new Intent(context, AlarmNotificationReciever.class); 
    Bundle extras = new Bundle(); 
    extras.putBoolean(KEY_REPEAT, true); 
    extras.putInt("AlarmId", alarmID); 
    intent.putExtras(extras); 
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 
     alarmID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Calendar calender = Calendar.getInstance(); 
    calender.set(Calendar.HOUR_OF_DAY, hour); 
    calender.set(Calendar.MINUTE, minute); 

    if (android.os.Build.VERSION.SDK_INT >= 19) { 
     setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 
    } else { 
     mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
      calender.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent); 

    } 
} 

我假設問題是布萊恩克至與這裏這些行:

Calendar calender = Calendar.getInstance(); 
calender.set(Calendar.HOUR_OF_DAY, hour); 
calender.set(Calendar.MINUTE, minute); 

,並設置報警時,這條線:

setSingleExactAlarm(calender.getTimeInMillis(), pIntent); 

對於以往其他的時針和分針組合似乎工作,並把它作爲一個時間去關閉。但是,對於小時= 0和分= 0,它只是直接射擊。

在此先感謝您的幫助。

+1

的問題是新的一天。如果您將小時設置爲0:00,則系統將在同一天響鈴。你必須在第二天的0點增加一天的時間。它會直接點燃,因爲如果設定的時間過去了,警報將會啓動..... – Opiatefuchs

回答

3

這是預期的行爲。

Calendar.getInstance()返回設置爲當前日期/時間的Calendar實例。

使日期保持不變並將小時和分鐘字段設置爲0可以有效地設置過去的警報(它被認爲是錯過警報)。

setRepeating()documentation

如果規定的觸發時間過去,報警器會立即觸發 ,與報警數取決於過去多遠 觸發時間與重複間隔有關。

你可以做這樣的事情進行檢查:

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, hour); 
calendar.set(Calendar.MINUTE, minute); 

Calendar now = Calendar.getInstance(); 

if(calendar.before(now)) { 
    // handle this as you wish 

    // adding a day to calendar 
    calendar.add(Calendar.DATE, 1); 
} 
相關問題