Один JobService несколько идентификаторов работы - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь вызвать JobService из широковещательного приемника на основе полученных пользовательских широковещательных сообщений. Теперь я использовал один JobService с несколькими идентификаторами в зависимости от типа полученного широковещательного сообщения.

Вот код моего Broadcast Receiver.

public class SampleBroadcast extends BroadcastReceiver {


@Override
    public void onReceive(Context context, Intent intent) {


      if (Objects.equals(intent.getAction(), "com.example.BroadCastA")) {

        if(isJobServiceBOn(context){

        StopALLJobService(context)

       StartJobServiceA()

         }else{

         StartJobServiceA()

       }

}else if(Objects.equals(intent.getAction(), "com.example.BroadCastB")){


     if(isJobServiceAOn(context){

        StopALLJobService(context)

       StartJobServiceB()

         }else{

         StartJobServiceB()

       }

}

}


private void StartJobServiceA(){

ComponentName serviceComp = new ComponentName(context, ExampleJobService.class);

        PersistableBundle bundle = new PersistableBundle();


        JobInfo.Builder JobInfor = new JobInfo.Builder(1, serviceComp);

        JobInfor.setMinimumLatency(100);
        JobInfor.setPersisted(true);

        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        if (jobScheduler != null) {
            jobScheduler.schedule(JobInfor.build());
        }

}


private void StartJobServiceB(){

ComponentName serviceComp = new ComponentName(context, ExampleJobService.class);

        PersistableBundle bundle = new PersistableBundle();


        JobInfo.Builder JobInfor = new JobInfo.Builder(2, serviceComp);

        JobInfor.setMinimumLatency(100);
        JobInfor.setPersisted(true);

        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        if (jobScheduler != null) {
            jobScheduler.schedule(JobInfor.build());
        }



}


public static boolean isJobServiceAOn( Context context ) {
        JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

        boolean hasBeenScheduled = false ;

        if (scheduler != null) {
            for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
                if ( jobInfo.getId() == 1 ) {
                    hasBeenScheduled = true ;
                    break ;
                }
            }
        }

        return hasBeenScheduled ;
    }

public static boolean isJobServiceBOn( Context context ) {
        JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

        boolean hasBeenScheduled = false ;

        if (scheduler != null) {
            for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
                if ( jobInfo.getId() == 2 ) {
                    hasBeenScheduled = true ;
                    break ;
                }
            }
        }

        return hasBeenScheduled ;
    }



 private void StopALLJobService(Context context){
        JobScheduler jobSchedule = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;
        if (jobSchedule != null) {
            jobSchedule.cancelAll();
        }
        Log.i(TAG,"Jobservice cancelled due to either BroadcastA or BroadcastB");

    }






}






}

А вот класс JobService

public class ExampleJobService extends JobService {

private int JobID;

 @Override
    public boolean onStartJob(JobParameters params) {


    JobID = params.getJobId();


    switch(JobID){

    case 1:

        taskA;

     break;

    case 2:

       taskB;

      break;

}

return true;

}


 @Override
    public boolean onStopJob(JobParameters params) {

 Log.d(TAG,"Jobservice terminated by system");

return true;

}








}

Сам код работает отлично. Но я не знаю, является ли это правильным способом использования JobService или мне следует использовать два разных класса JobService, основанных на полученном широковещательном сообщении.

...