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將監聽網絡改變(可用/不可用),比執行你的任務或安排與JobScheduler

工作您將有一個CONNECTIVITY_ACTION過濾器添加到您的BroadcastReceiver像這樣:

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 
     } 
    } 
} 
相關問題