0

基本上它是一個週期性的GcmNetworkManager任務,應該在特定的時間每天運行,它是持久的,因此它在重新啓動後仍然存在,它的週期爲86400000L(24h),但是我需要它在特定的時間第一次運行。如何安排GcmTaskService在特定時間每天運行

我已經創建了TaskService類,將它添加到清單並創建了任務,有沒有辦法做到這一點?

這是我TaskService類:

public class AgendaTaskService extends GcmTaskService { 

private static final String TAG = "AgendaTaskService"; 
public static final String TAG_TASK_UPDATE_EVENTS = "AgendaTaskService"; 

@Override 
public int onRunTask(TaskParams taskParams) { 

     Log.i(TAG,"Running task"); 

     switch (taskParams.getTag()){ 

      case TAG_TASK_UPDATE_EVENTS: 
       Log.i(TAG,"Updating agenda events"); 

       //TODO HERE IS WHERE MY TASK WILL RUN 

       return GcmNetworkManager.RESULT_SUCCESS; 

      default: return GcmNetworkManager.RESULT_FAILURE; 

     } 

    } 

} 

這是我如何創建任務:

GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(this); 
    PeriodicTask task = new PeriodicTask.Builder() 
      .setService(AgendaTaskService.class) 
      .setTag(AgendaTaskService.TAG_TASK_UPDATE_EVENTS) 
      .setPersisted(true) 
      .setPeriod(30L) 
      .setUpdateCurrent(true) 
      .build(); 
    gcmNetworkManager.schedule(task); 
+0

你不能使用一次性的任務,爲你的具體時間,然後開始週期性任務? –

回答

0

使用AlarmManager安排一個PendingIntent開始Service在你的觸發時間,並在該服務運行時執行所需的GCM特定調度。

2

可以安排OneOffTask觸發您PeriodicTask

+1

這應該是被接受的答案。如果AlarmManager是一種理想的方法,那麼可能首先使用它,而不是GcmNetworkManager。 –

+0

謝謝,但我想值得注意的是,如果需要嚴格的時間安排,AlarmManager可能仍然會更好。設備空閒/打盹模式將延遲'GcmNetworkManager'任務和'JobScheduler'作業 – user3829751

相關問題