├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── tutsplus │ │ └── jobscheduler │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── tutsplus │ │ └── jobscheduler │ │ ├── JobSchedulerService.java │ │ └── MainActivity.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-mdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ └── ic_launcher.png │ ├── layout │ └── activity_main.xml │ ├── menu │ └── menu_main.xml │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Tuts+ Tutorial: Using the JobScheduler API on Android Lollipop 2 | 3 | #### Instructor: Paul Trebilcox-Ruiz 4 | 5 | In this tutorial, you will learn how to use the JobScheduler API available in Android Lollipop. The JobScheduler API allows developers to create jobs that execute in the background when certain conditions are met. 6 | 7 | Source files for the Tuts+ tutorial: [Using the JobScheduler API on Android Lollipop](http://code.tutsplus.com/tutorials/using-the-jobscheduler-api-on-android-lollipop--cms-23562) 8 | 9 | **Read this tutorial on [Tuts+](https://code.tutsplus.com)** 10 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 21 5 | buildToolsVersion "21.1.2" 6 | 7 | defaultConfig { 8 | applicationId "com.tutsplus.jobscheduler" 9 | minSdkVersion 21 10 | targetSdkVersion 21 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | } 25 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/paulruiz/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/tutsplus/jobscheduler/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.tutsplus.jobscheduler; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/tutsplus/jobscheduler/JobSchedulerService.java: -------------------------------------------------------------------------------- 1 | package com.tutsplus.jobscheduler; 2 | 3 | import android.app.job.JobParameters; 4 | import android.app.job.JobService; 5 | import android.os.Handler; 6 | import android.os.Message; 7 | import android.widget.Toast; 8 | 9 | /** 10 | * Created by paulruiz on 3/7/15. 11 | */ 12 | public class JobSchedulerService extends JobService { 13 | 14 | private Handler mJobHandler = new Handler( new Handler.Callback() { 15 | @Override 16 | public boolean handleMessage( Message msg ) { 17 | Toast.makeText( getApplicationContext(), "JobService task running", Toast.LENGTH_SHORT ).show(); 18 | jobFinished( (JobParameters) msg.obj, false ); 19 | return true; 20 | } 21 | } ); 22 | 23 | @Override 24 | public boolean onStartJob(JobParameters params ) { 25 | mJobHandler.sendMessage( Message.obtain( mJobHandler, 1, params ) ); 26 | return true; 27 | } 28 | 29 | @Override 30 | public boolean onStopJob( JobParameters params ) { 31 | mJobHandler.removeMessages( 1 ); 32 | return false; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/tutsplus/jobscheduler/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.tutsplus.jobscheduler; 2 | 3 | import android.app.Activity; 4 | import android.app.job.JobInfo; 5 | import android.app.job.JobScheduler; 6 | import android.content.ComponentName; 7 | import android.content.Context; 8 | import android.os.Bundle; 9 | import android.view.Menu; 10 | import android.view.MenuItem; 11 | import android.view.View; 12 | import android.widget.Button; 13 | 14 | 15 | public class MainActivity extends Activity { 16 | 17 | private JobScheduler mJobScheduler; 18 | private Button mScheduleJobButton; 19 | private Button mCancelAllJobsButton; 20 | 21 | @Override 22 | protected void onCreate( Bundle savedInstanceState ) { 23 | super.onCreate( savedInstanceState ); 24 | setContentView( R.layout.activity_main ); 25 | mJobScheduler = (JobScheduler) getSystemService( Context.JOB_SCHEDULER_SERVICE ); 26 | mScheduleJobButton = (Button) findViewById( R.id.schedule_job ); 27 | mCancelAllJobsButton = (Button) findViewById( R.id.cancel_all ); 28 | 29 | mScheduleJobButton.setOnClickListener( new View.OnClickListener() { 30 | @Override 31 | public void onClick(View v) { 32 | JobInfo.Builder builder = new JobInfo.Builder( 1, 33 | new ComponentName( getPackageName(), JobSchedulerService.class.getName() ) ); 34 | 35 | builder.setPeriodic( 3000 ); 36 | 37 | 38 | if( mJobScheduler.schedule( builder.build() ) <= 0 ) { 39 | //If something goes wrong 40 | } 41 | } 42 | }); 43 | 44 | mCancelAllJobsButton.setOnClickListener( new View.OnClickListener() { 45 | @Override 46 | public void onClick( View v ) { 47 | mJobScheduler.cancelAll(); 48 | } 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tutsplus/Android-JobSchedulerAPI/23f6b96f59af390e138ab75832b4d47385218951/app/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tutsplus/Android-JobSchedulerAPI/23f6b96f59af390e138ab75832b4d47385218951/app/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tutsplus/Android-JobSchedulerAPI/23f6b96f59af390e138ab75832b4d47385218951/app/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tutsplus/Android-JobSchedulerAPI/23f6b96f59af390e138ab75832b4d47385218951/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 |