2016-10-10 31 views
0

我正在嘗試編寫將在特定時間每天運行任務的代碼。在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分鐘是一個多小時。爲什麼是這樣的?

+0

你知道當你調用calendar.set(Calendar.DATE ...)時,你重寫了添加日期的日期,對嗎? – MikeL

+0

@MikeL我真的不明白這是如何工作的。我做了它在這裏完成相同的方式:http://stackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-time –

+0

其實我錯了覆蓋,你做一些事情更糟糕的是,你每增加一次當前的某一天(例如現在是284年),所以你將日曆設置爲下一年,然後你將日期覆蓋到當前日期,但是今年仍然是下一個日期。嘗試刪除「.add」部分並對其進行測試。 – MikeL

回答

0

好吧,我發現如何解決我的問題。 首先感謝@MikeL建議刪除calendar.add(Calendar.DAY_OF_YEAR, current.get(Calendar.DAY_OF_YEAR));,因爲那確實修復了一些內容,但即使在此之後它也不起作用。

要解決我改變PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent1, 0);PendingIntent pendingIntent = PendingIntent.getBroadcast(this, hour, intent1, 0);

問題基本上改變0至hour使每個未決意圖是不同的。

相關問題