2016-07-20 3 views
4

Je travaille sur une application qui exécute la tâche d'arrière-plan après 10 secondes et vérifie si le périphérique est inactif ou non, mais comment il se déclenche toutes les 10 secondes sans vérifier que le périphérique est inactif ou ne pas.Job Scheduling setRequiresDeviceIdle (true) et setPeriodic() ne fonctionnent pas

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, Quelqu'un a idée de ce que je fais mal? S'il vous plaît aider? Ajouter .setRequirementsEnforced (true) corrigera probablement votre problème.

Répondre

0

Voir la documentation: Il est possible de définir plusieurs exigences pour un travail, mais elles ne doivent pas toutes être prises en compte par le sous-jacent {@link JobApi}. Si les exigences sont appliquées, l'état du périphérique est vérifié avant l'exécution de votre travail. Si au moins une exigence n'est pas satisfaite, le travail est replanifié et n'est pas exécuté. ...