Android 8 Oreo migrer vers Job Scheduler

Android 8 Oreo migrer vers Job Scheduler

Bonjour les amis codeurs.

Depuis la mise en place de ANDROID OREO (SDK 27) la manière de faire des appels serveur par exemple ou des routines (des taches répétitives en arrière plan) à été modifiée.

En effet sur les smartphones munit de Android 8, si vous ne changez pas le code de vos applications cela peut provoquer une mal fonction et voir même un crash.

L’ancienne méthode qui consistait a utiliser un Service avec un Broadcast Receiver et Alarm Manager est obsolète sous OREO désormais.

Nouvelle méthode avec Job Scheduler

Pour pouvoir toujours effectuer des taches répétitives en arrière plan, vous devez désormais utiliser Job Scheduler avec le SDK 27 (Android Oreo) ou plus …

(pour les versions précédentes de Android vous pouvez toujours conserver l’ancienne méthode avec Broadcast Receiver et Alarm Manager ).

Exemple d’utilisation de Job Scheduler

Pour pouvoir utiliser cette nouvelle méthode il faut par commencer par renseigner le fichier AndroidManifest.xml, on rajoute cette ligne du nom de notre nouvelle classe MyJobService.java qui sera considéré comme un service comme vous le voyez.

<service android:name="MyJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

Ensuite dans le fichier java de votre activité ( Activity ) mettre ceci le déclencheur de votre nouveau Service que nous créerons ultérieurement.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// on lance le JOB que pour OREO
long flexMillis = 15 * 60 * 1000;
// le temps entre chaque réquete (15 minutes)

JobScheduler jobScheduler = (JobScheduler) getApplicationContext()
.getSystemService(JOB_SCHEDULER_SERVICE);

ComponentName componentName = new ComponentName(this,
MyJobService.class);
// on instancie notre classe que nous créerons plus tard

JobInfo jobInfoObj = new JobInfo.Builder(1, componentName).setPeriodic(flexMillis, flexMillis).setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
// type de réseau nécessaire si connecté ou non.
.setRequiresCharging(false)
// si la tache nécessite un smartphone chargé ou non
.setPersisted(true).build();
// si la tache doit toujours rester active ou non
jobScheduler.schedule(jobInfoObj);
}

pour finir créer votre Service MyJobService.java

public class MyJobService extends JobService {
    Context ctx;

    @Override
    public boolean onStartJob(final JobParameters params) {
        ctx = getBaseContext();
//le contexte pour afficher le toast
// ici mettre votre travail a faire en tache répétitive en exemple ici un toast
        try {
// moi je rajoute souvent un TRY en cas de problème sur une opération risqué
            Log.i("JOBB","OK");
//simple log dans le logcat
            Toast.makeText(ctx, "test ok" ,
                    Toast.LENGTH_LONG).show();
// on affiche "test ok "
        } catch (Exception x) {
// rien en cas d\'echec dans la condition TRY
        }
    }

    @Override
    public boolean onStopJob(JobParameters params) {
     //  ici a faire en cas d\'echec du JOB Service
        return false;
    }

    }

Voila, si vous ajoutez bien ce code dans votre application Android, toutes les 15 minutes un message Toast apparaitra, même après un redémarrage de la tablette ou du smartphone.Bonne code à tous et bonne journée.