0

인터넷이있을 때 실행할 작업을 예약하려면 아래 코드를 사용하지만 한 번만 실행되므로 사용 가능한 네트워크가있을 때마다 실행하고 싶습니다. 이것이 가능한가?Job Scheduler는 사용 가능한 네트워크가있을 때마다 작업을 실행합니까?

나는 정기적으로 작업을 만들고 네트워크 제약 조건을 추가하여 네트워크 제약 조건을 추가하여 잠자기 및 깨어나서 사용 가능한 네트워크가 있는지 확인한 다음 사용 가능한 네트워크가 있는지 확인한 후 작업을 실행하고 다른 작업은 실행합니다. 다시 슬립 모드로하지만 작업이

이 스케줄링 코드는 (어떤 네트워크 제약이없는 것처럼) 기간이 최대 때마다 항상 실행 이후가 원하는 행동을하지 않았다

mJobScheduler = (JobScheduler) 
       getSystemService(Context.JOB_SCHEDULER_SERVICE); 

     JobInfo.Builder builder = new JobInfo.Builder(1, 
       new ComponentName(getPackageName(), 
         JobSchedulerService.class.getName())); 

     // builder.setPeriodic(3000); 

     builder.setPersisted(true); 
     builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); 
     mJobScheduler.schedule(builder.build()); 

답변

0

BroadcastReceiver을 등록 할 수 있습니다. (/ 사용 가능 사용할 수 없음) 네트워크의 변화를 듣고보다 당신은 너무처럼 BroadcastReceiverCONNECTIVITY_ACTION 필터를 추가해야합니다 귀하의 작업을 실행하거나 JobScheduler

과 함께 작업을 예약합니다 :

IntentFilter filter = new IntentFilter(); 
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
getActivity().registerReceiver(networkStateReceiver, filter); 

를 그리고 구현하여 BroadcastReceiver 이런 식으로 :

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    if (intent != null && intent.getExtras() != null) 
    {    
     ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = manager.getActiveNetworkInfo(); 

     if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) 
     { 
      // conected 
     } 
     else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) 
     { 
      // not connected 
     } 
    } 
}