0

基本的には定期的なGcmNetworkManagerタスクで、特定の時刻に毎日実行する必要があり、再起動後も存続するように永続的です。期間は86400000L(24時間)です。特定の時間に初めて実行する必要があります。どのように特定の時刻に毎日実行するようにGcmTaskServiceをスケジュールする

私は既に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; 

     } 

    } 

} 

そして、これは私がタスク作成しています方法です:

これは私のTaskServiceクラスである、あなたのトリガ時にServiceを開始するPendingIntentをスケジュールするために使用AlarmManager

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

はあなたの特定の時間のために1オフタスクを使用できませんでしたし、それはその後、定期的なタスクを開始トリガするOneOffTaskをスケジュールすることができますか? –

答えて

0

を、そのサービスの実行時に必要なGCM固有のスケジューリングを実行します。

2

あなたのPeriodicTask

+1

これは受け入れられる回答である必要があります。 AlarmManagerが望ましいアプローチだった場合は、最初にGcmNetworkManagerではなくAlarmManagerを使用している可能性があります。 –

+0

ありがとうございます。しかし、厳密なタイミングが必要な場合には、 'AlarmManager'が依然として好ましいかもしれないことに気づく価値はあると思います。デバイスのアイドル/ドーズモードは 'GcmNetworkManager'タスクと' JobScheduler'ジョブを延期します – user3829751

関連する問題