当互联网连接丢失时,JobScheduler用于启动应用程序(8.0+)

时间:2018-06-13 04:44:13

标签: android service android-jobscheduler

当设备没有互联网连接时,我的应用会使用特殊的META-INF folder。如果设备具有Internet连接,则应用程序将关闭,并在连接丢失时启动。

我在8.0以下的API上使用xxxxx-version.jar BOOT-INF权限,当网络发生变化并且我开始foreground service脱机工作时,应用会唤醒。但是在8.0上它不再起作用了。

如何在8.0上执行此操作?我必须使用BroadcastReceiver吗?在这种情况下如何使用它?

2 个答案:

答案 0 :(得分:0)

很遗憾,您无法再接收Android 8.0+中的CONNECTIVITY_CHANGE广播。 Android网站推荐使用Job Scheduler,但还有另一个解决方案 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);

答案 1 :(得分:0)

我应用了此解决方案。工作正常。但是我认为这不是最好的解决方案。

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"/>