2016-07-27 15 views
1

私はJobSchedulerとJobServiceでWebサービスを呼び出すために定期的な非同期タスクを作成しようとしています。しかし、私の考えは、この作業を1日に1回、いつも同じ時間に実行しようとすることでした。たぶんユーザーがタスクが起動された日付の時間を更新させることさえできます。AndroidのJobInfoビルダーは毎日

JobInfo.Builderはこの可用性をサポートしていますか?私は "setPeriodic"を使っていたので、私はこれが当てはまるとは思わない。

この機能には、AlarmManagerを使用してください。

これが今のサービスを呼び出すコードです:

private void launchCheckShowStatusJob(){ 
     ComponentName serviceComponent = new ComponentName(this, CheckShowsStatusService.class); 
     JobInfo.Builder builder = new JobInfo.Builder(jobId++, serviceComponent); 
     builder.setMinimumLatency(0); 
     builder.setPeriodic(5*1000); //Every 5 minutes, can this be use to set a dayly task? 
     builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); //Require any network 
     builder.setRequiresCharging(false); 

     JobScheduler jobScheduler = (JobScheduler) getApplication().getSystemService(Context.JOB_SCHEDULER_SERVICE); 
     jobScheduler.schedule(builder.build()); 
    } 

答えて

0

あなたのジョブスケジューラが起動デバイスの時間を確認してからOnStartJobの内側にその最初の

public override bool OnStartJob (JobParameters args) 
    { if (devicetime == (that unique time)){ ... } } 
のような時間を得ることができます

を入力して、必要な操作を行うことができます。

ただし、アンドロイド7.0は、ジョブスケジューラが正確な時刻に動作することを保証しません。あなたのユニークな時間をより広く選んでください。

第2のオプションは、あなたのケースでもうまく動作するアラームマネージャです。 便利なソリューションがあります。 Using Alarmmanager to start a service at specific time