2017-01-02 29 views
0

我遵循以下鏈接https://developer.android.com/training/scheduling/alarms.html通過傳遞calendar.getTimeInMillis()使用AlarmManager設置通知,立即觸發通知不會在預期的時間

RTC例子第一個,爲所有日子的特定時間設置鬧鐘。即使在遵循相同的代碼之後,警報在假定被觸發時也不會被觸發。相反,notification會在設置時間選擇器的幫助下完成時間後立即觸發。以下是我的代碼片段,

AlarmManager alarmMgr = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(this, NotificationReceiver.class); 
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,4); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm); 

代替setRepeating我也試過setInexactRepeating但沒有luck.I也想補充的是,當我改變了

calendar.getTimeInMillis()和使用SystemClock.elapsedRealtime() + 120 * 1000恰好觸發報警後從設定時間開始2分鐘。

但是,當使用calendar.getTimeInMillis()時,預期的工作不會發生,而是發生立即觸發。

會確實是非常有益的,如果有人能幫助我找到一條solution.Only的注意,如果報警當前設備的時間之前設定的報警會立即觸發,但在這裏,是不是這樣我可以學習。

NotificationReceiver.class工作正常,因爲它生成並出現在標題上。但是它出現的時間是令人擔憂的原因。

回答

0

您正在使用setTimeInMillis和hourofday和minute。

如果您希望在4:30觸發您的鬧鐘,只需添加hourofday和minute。

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY,4); 
calendar.set(Calendar.MINUTE, 30);` 
0

我可以確定我正面臨的問題。我使用24小時格式的TimePicker。但我使用SimpleDateFormat「hh:mm」。 h表示「h->上午/下午(1-12)小時」。所以我在AM上設置的任何警報都會正確觸發。當我在PM上設定時間後,我使用了1-12'h'格式,鬧鐘被設置爲AM時間,並且與設備時間相比,鬧鐘/通知立即被觸發,此時間已經過去了。正確的格式使用的是「HH:MM」,其中「H」代表「H->白天(0-23)」。這解決了我的問題。

檢查在線時代轉換時間轉換器中的TimeinMillis幫助我識別此問題。再次感謝您的幫助。