Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check JobService is running or not in android?

I am using JobService in my project. It's working good. But sometimes service stopped. It is not restart again. So that I am trying to strat the JobService if not running. But I don't know how to check JobService is already running or not. Please let me any idea to how to check JobService is running or not.

My Job service class:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class JobService extends android.app.job.JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        if (NetworkHandler.getInstance().isNetworkAvailable()) {
            TaskHandler.getInstance().getTaskListFromServer(PreferenceManagerForPlannedRoute.getInstance().getLastSyncTime(), PreferenceManagerForPlannedRoute.getInstance().getInProgressMoveTask());
            NotificationUtils.getInstance().CreateNotification();
            Logger.d("Scheduler", "Working!!");
        } else {
            Logger.d("Network", "not available");
        }
        return false;
    }


    @Override
    public boolean onStopJob(JobParameters params) {
        Logger.d("onStopJob", "Stopped");
        return true;
    }
}

My Util Class:

public class JobSchedulerUtils {

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public static void scheduleJob(Context context) {
        ComponentName serviceComponent = new ComponentName(context, JobService.class);
        JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
        builder.setRequiresDeviceIdle(false);
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
        builder.setPeriodic(5000);
        builder.setPersisted(true);           
        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        jobScheduler.schedule(builder.build());
    }
}

To start:

synchronized public void startAlarmManager() {
        if(Build.VERSION.SDK_INT>=21) {
            JobSchedulerUtils.scheduleJob(Application.getInstance().getApplicationContext());
        }else {
            Intent myIntent = new Intent(Application.getInstance(), AlarmManagerForPlannedRoute.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(Application.getInstance(), 0, myIntent, 0);
            AlarmManager alarmManager = (AlarmManager) Application.getInstance().getSystemService(Context.ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), Constants.TIME_DELAY_FOR_TASK_LIST_SERVICE_CALL_IN_SECONDS * 1000, pendingIntent);
        }
    }

To Stop:

 synchronized private void stopAlarmManager(Activity activity) {
        if(Build.VERSION.SDK_INT>=21){
            JobScheduler jobScheduler = (JobScheduler) Application.getInstance().getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
            jobScheduler.cancelAll();
        }else {
            Intent myIntent = new Intent(activity, AlarmManagerForPlannedRoute.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, 0, myIntent, 0);
            AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
        }
    }
like image 625
Vijayadhas Chandrasekaran Avatar asked Oct 03 '17 11:10

Vijayadhas Chandrasekaran


People also ask

How do you check whether the service is running or not in android?

You can do this by making your own Interface where you declare for example " isServiceRunning() ". You can then bind your Activity to your Service, run the method isServiceRunning(), the Service will check for itself if it is running or not and returns a boolean to your Activity.

What is JobService?

android.app.job.JobService. Entry point for the callback from the JobScheduler . This is the base class that handles asynchronous requests that were previously scheduled. You are responsible for overriding JobService#onStartJob(JobParameters) , which is where you will implement your job logic.

What is meant by on start job called?

OnStartJob is called by the Android system when it starts your job. However, onStopJob is only called if the job was cancelled before being finished (e.g. we require the device to be charging, and it gets unplugged).


1 Answers

I got the solution.

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

    boolean hasBeenScheduled = false ;

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

    return hasBeenScheduled ;
}

Using of this method we can check jobService is running or not.

like image 86
Vijayadhas Chandrasekaran Avatar answered Sep 22 '22 19:09

Vijayadhas Chandrasekaran