The new JobService must be registered in the Android manifest with the BIND_JOB_SERVICE permission.
<service android:name=".TestJobService" android:label="Word service" android:permission="android.permission.BIND_JOB_SERVICE" > </service>
Create the receiver
Create the following utility class.
package com.vogella.android.localservice; import android.app.job.JobInfo; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; public class Util { // schedule the start of the service every 10 - 30 seconds public static void scheduleJob(Context context) { ComponentName serviceComponent = new ComponentName(context, TestJobService.class); JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent); builder.setMinimumLatency(1 * 1000); // wait at least builder.setOverrideDeadline(3 * 1000); // maximum delay //builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // require unmetered network //builder.setRequiresDeviceIdle(true); // device should be idle //builder.setRequiresCharging(false); // we don't care if the device is charging or not JobScheduler jobScheduler = context.getSystemService(JobScheduler.class); jobScheduler.schedule(builder.build()); } }
Create the following receiver
package com.vogella.android.localservice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyStartServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Util.scheduleJob(context); } }
Register the receiver in the Android manifest for the BOOT_COMPLETED event.
<receiver android:name="MyStartServiceReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
Create your job
package com.vogella.android.localservice; import android.app.job.JobParameters; import android.app.job.JobService; import android.content.Intent; /** * JobService to be scheduled by the JobScheduler. * start another service */ public class TestJobService extends JobService { private static final String TAG = "SyncService"; @Override public boolean onStartJob(JobParameters params) { Intent service = new Intent(getApplicationContext(), LocalWordService.class); getApplicationContext().startService(service); Util.scheduleJob(getApplicationContext()); // reschedule the job return true; } @Override public boolean onStopJob(JobParameters params) { return true; } }
References
http://www.vogella.com/tutorials/AndroidTaskScheduling/article.html
https://code.tutsplus.com/tutorials/using-the-jobscheduler-api-on-android-lollipop–cms-23562
https://medium.com/google-developers/scheduling-jobs-like-a-pro-with-jobscheduler-286ef8510129