JobScheduler для запуска приложения при потере интернет-соединения (8.0+) - PullRequest
0 голосов
/ 13 июня 2018

Мое приложение использует специальный foreground service, когда устройство не подключено к Интернету.Приложение закрывается, если устройство подключено к Интернету, и запускается при потере подключения.

Я использую BroadcastReceiver с разрешением CONNECTIVITY_CHANGE для API ниже 8.0, приложение активируется при изменении сети, и я начинаюмой foreground service для работы в автономном режиме.Но на 8.0 он больше не работает.

Как это сделать на 8.0?Должен ли я использовать JobScheduler?Как использовать это в этом случае?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я применил это решение.Работает нормально.Но я думаю, что это не лучшее решение.

public class MyInternetTest {

public static void scheduleJob() {
    JobScheduler scheduler = (JobScheduler) appContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);

    JobInfo job = new JobInfo.Builder(1, new ComponentName(appContext, MyInternetTest.NetworkSchedulerService.class))
            .setMinimumLatency(15000)
            .setPersisted(true)
            .build();

    scheduler.schedule(job);
}


public static class NetworkSchedulerService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        scheduleJob();
        //
        //  Do internet check
        //
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}}

В манифесте

 <service
        android:name=".controllers.MyInternetTest$NetworkSchedulerService"
        android:exported="true"
        android:permission="android.permission.BIND_JOB_SERVICE"/>
0 голосов
/ 13 июня 2018

К сожалению, вы больше не можете получать CONNECTIVITY_CHANGE трансляцию в Android 8.0+.Сайт Android рекомендует планировщик заданий, но есть другое решение под названием WorkManager , которое сочетает в себе лучшее из JobScheduler, Firebase JobDispatcher и AlarmManager.

Вы можете использовать повторяющиеся задачи для достижения функциональности

new PeriodicWorkRequest.Builder photoCheckBuilder =
    new PeriodicWorkRequest.Builder(YourWorker.class, 12,
                                    TimeUnit.HOURS);//Or any other time period
 // ...if you want, you can apply constraints to the builder here...

// Create the actual work object:
 PeriodicWorkRequest work = photoCheckBuilder.build();
// Then enqueue the recurring task:
WorkManager.getInstance().enqueue(work);
...