我正在嘗試編寫將在特定時間每天運行任務的代碼。在AlarmManager和Calendar中使用服務在每個特定時間運行任務不起作用
我有一個hours
數組,其中包含整數,我通過它循環設置從那個小時和一天的時間間隔重複鬧鐘。
如果我只是創建服務並每隔10秒運行一次任務,它會運行AlarmReciever
,但在添加Calendar
API後此代碼不起作用,我做錯了什麼?
AlarmManager alarmManager;
Calendar current = new GregorianCalendar();
Calendar calendar = new GregorianCalendar();
int[] hours = new int[] {14, 18, 21, 22};
public int onStartCommand(Intent intent, int flags, int startId) {
current.setTimeInMillis(System.currentTimeMillis());
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent1 = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent1, 0);
for (int hour : hours) {
calendar.add(Calendar.DAY_OF_YEAR, current.get(Calendar.DAY_OF_YEAR));
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DATE, current.get(Calendar.DATE));
calendar.set(Calendar.MONTH, current.get(Calendar.MONTH));
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
return START_STICKY;
}
編輯:我想每一個循環打印出calendar.getTimeInMillis()
這裏是輸出
I/System.out: 2391249600000
I/System.out: 2643724800000
I/System.out: 2769962400000
I/System.out: 2833038000000
可以說,我走了兩個第一號:2643724800000 - 2391249600000 = 252475200000.1000分之252475200000= 252475200。 252475200/60 = 4207920. 我很確定4207920分鐘是一個多小時。爲什麼是這樣的?
你知道當你調用calendar.set(Calendar.DATE ...)時,你重寫了添加日期的日期,對嗎? – MikeL
@MikeL我真的不明白這是如何工作的。我做了它在這裏完成相同的方式:http://stackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-time –
其實我錯了覆蓋,你做一些事情更糟糕的是,你每增加一次當前的某一天(例如現在是284年),所以你將日曆設置爲下一年,然後你將日期覆蓋到當前日期,但是今年仍然是下一個日期。嘗試刪除「.add」部分並對其進行測試。 – MikeL