用于在互联网连接丢失时启动应用程序的作业计划程序 (8.0+)



当设备没有互联网连接时,我的应用程序使用特殊foreground service。如果设备有互联网连接,该应用程序将关闭,并在连接丢失时启动。

我在 API 上使用具有 8.0 以下CONNECTIVITY_CHANGE权限的BroadcastReceiver,当网络更改时应用程序会唤醒,我开始离线工作foreground service。但是在 8.0 上它不再起作用了。

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

很遗憾,您无法再接收 Android 8.0+ 中的CONNECTIVITY_CHANGE广播。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);

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

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

最新更新