2017-04-07 63 views
0

我看了很多文章,但看起來不適合我!Android鬧鐘管理器在特定時間運行任務

我必須安排一個重複的任務與AlarmManager每天7:15。在活動中設置以下方法併爲其註冊廣播接收器!

private void setTask(Context context) { 

    Calendar updateTime = Calendar.getInstance(); 
    updateTime.setTimeZone(TimeZone.getTimeZone("GMT")); 
    updateTime.set(Calendar.HOUR_OF_DAY, 7); 
    updateTime.set(Calendar.MINUTE, 15); 

    Intent intent = new Intent(context, NotifyUpdate.class); 
    PendingIntent fireAlarm = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarms.setRepeating(alarms.RTC_WAKEUP, updateTime.getTimeInMillis(), alarms.INTERVAL_DAY, fireAlarm); 
} 

問題是,當我運行方法被執行應用程序立即不管時間的設定,但在(7:15)不執行。

任何想法?

+0

「NotifyUpdate」類是「Service」還是「BroadcastReceiver」? – devnull69

+0

感謝您的回覆!這是一個BroadcastReceiver –

+0

報警似乎很好。偏差可能在其他地方......您確定您不手動從其他地方的BroadcastReceiver調用該方法嗎?此外,如果您沒有將您的應用添加到優化例外列表中,Android6 +打盹模式可能會干擾AlarmManager。 – devnull69

回答

0

設置報警

Calendar now = Calendar.getInstance(); 
if (updateTime.before(now)) { 
      updateTime.add(Calendar.DAY_OF_MONTH, 1); // if its in the past increment 
} 

alarms.setRepeating(alarms.RTC_WAKEUP, updateTime.getTimeInMillis(), alarms.INTERVAL_DAY, fireAlarm); 

你說,你有不依賴於時間立即觸發之前,試試這個。這是因爲updateTime對象在過去的時間引用,所以我們的目標是在未來將鬧鐘設置爲7:15。這將有助於避免立即觸發。

+0

請爲您的答案添加解釋。 – jmattheis

+0

請將此編輯添加到您的答案。 – jmattheis

+0

在我的代碼中,我帶走了日曆實例並保存在updateTime上!我能得到另一個實例並保存在現在?! –

相關問題