2017-09-07 4 views
0

JobSchedulerでHttpUrlConnectionなど(サーバーへのアップロード用)を使用したネットワーキングが可能ですか?それともGCMNetworkManagerと一緒に行かなければならないのですか?どのようにネットワーク運用スケジューリングを実行できますか?Jobschedulerとのネットワーク

MainActivity.class

jobScheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE); 
btnStartJob.setOnClickListener(new View.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 

     ComponentName jobService = 
       new ComponentName(getPackageName(), MyJobService.class.getName()); 
     JobInfo jobInfo = 
       new JobInfo.Builder(MYJOBID, jobService).setPeriodic(10000).build(); 

     int jobId = jobScheduler.schedule(jobInfo); 
     if(jobScheduler.schedule(jobInfo)>0){ 
      Toast.makeText(MainActivity.this, 
        "Successfully scheduled job: " + jobId, 
        Toast.LENGTH_SHORT).show(); 
     }else{ 
      Toast.makeText(MainActivity.this, 
        "RESULT_FAILURE: " + jobId, 
        Toast.LENGTH_SHORT).show(); 
     } 
}}); 

MyJobService.class

public class MyJobService extends JobService { 
    public MyJobService() { 
    } 

    @Override 
    public boolean onStartJob(JobParameters jobParameters) { 
     Toast.makeText(this,"MyJobService.onStartJob()",Toast.LENGTH_SHORT).show(); 
     //networking is not working here 
     return false; 
    } 

    @Override 
    public boolean onStopJob(JobParameters jobParameters) { 
     Toast.makeText(this, 
       "MyJobService.onStopJob()", 
       Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
} 

答えて

2

はjobschedulerので可能(サーバにデータをアップロードするため)などのHttpURLConnectionを使用してネットワーキングていますか?

もちろんです。 JobInfoビルダーで.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)を使用すると、使用可能なネットワークがない場合でもジョブが実行されなくなります。

onStartJobはメインスレッドで実行されるため、別のスレッドでJobServiceでネットワーク操作を行う必要があります。

関連する問題