2016-07-20 10 views
4

Ich arbeite an App, die die Hintergrundaufgabe nach 10 Sekunden und überprüfen, ob das Gerät im Leerlauf ist oder nicht, aber einige wie es alle 10 Sekunden ohne Überprüfung Gerät im Leerlauf oder nicht.Job Scheduling setRequiresDeviceIdle (true) und setPeriodic() funktioniert nicht

MainActivity.java

private static final int JOB_ID = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mJobScheduler = (JobScheduler) getSystemService(this.JOB_SCHEDULER_SERVICE); 
    construct_job(); 
} 

private void construct_job(){ 

    JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, new ComponentName(getPackageName(), MyJobService.class.getName())) 
        .setPeriodic(10000).setRequiresDeviceIdle(true); 

    int code = mJobScheduler.schedule(builder.build()); 

    if(code <= 0) { 
      //If something goes wrong 
      Log.v("SOMETHING", "GOES WRONG"); 
    } 
} 

MyJobService.java

public class MyJobService extends JobService { 
     @Override 
     public boolean onStartJob(JobParameters params) { 

      Log.v("OnStart", "onStartJob-h"); 
      //Job Will Be Started Here 


      mJobHandler.sendMessage(Message.obtain(mJobHandler, 1, params)); 
      return true; 
     } 

     @Override 
     public boolean onStopJob(JobParameters params) { 
      Log.v("JOB","STOPPED"); 
      mJobHandler.removeMessages(1); 
      return false; 
     } 


     private Handler mJobHandler = new Handler(new Handler.Callback() { 

      @Override 
      public boolean handleMessage(Message msg) { 
       Toast.makeText(getApplicationContext(), 
         "JobService task running", Toast.LENGTH_SHORT) 
         .show(); 
       jobFinished((JobParameters) msg.obj, false); 
       return true; 
      } 

     }); 
} 

AndroidManifiest.xml

<service 
      android:name=".MyJobService" 
      android:permission="android.permission.BIND_JOB_SERVICE" 
      android:exported="true"/> 

Do, Anyone Ahnung haben, was mache ich falsch? Bitte helfen Sie?

Antwort

0

Das Hinzufügen von .setRequirementsEnforced (true) wird wahrscheinlich Ihr Problem beheben.

Siehe die Dokumentation: Es ist möglich, mehrere Anforderungen für einen Job festzulegen, jedoch müssen nicht alle vom zugrunde liegenden {@link JobApi} berücksichtigt werden. Wenn die Anforderungen erzwungen werden, wird der Gerätezustand überprüft, bevor der Job ausgeführt wird. Wenn mindestens eine Anforderung nicht erfüllt ist, wird der Job neu geplant und nicht ausgeführt. ...

Verwandte Themen