如果用户未漫游,我们的应用使用作业服务执行后台工作。这是我们安排作业的方式:
JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(JobServicesIds.CONNECTIVITY.getValue(), new ComponentName(context.getPackageName(), ConnectivityJobService.class.getName()));
jobInfoBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NOT_ROAMING);
jobInfoBuilder.setPersisted(false);
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
int result = jobScheduler.schedule(jobInfoBuilder.build());
为了测试这一点,我们使用模拟器,启用漫游,未连接wifi,将数据状态设置为漫游并启动应用程序。为了触发作业,我们将数据状态更改为"搜索",然后更改为"漫游"。在 Android 模拟器 API 24 中,作业将触发,一切都很棒。在 Android 模拟器 API 26 中,作业不会触发:(
有什么想法吗? :)
调用 setRequiredNetworkType 将网络定义为对作业的严格要求。如果请求的网络不可用,则作业将永远不会运行。请参阅设置覆盖截止时间(长(以更改此行为。调用此方法将覆盖以前由 setRequiredNetwork(NetworkRequest( 定义的任何要求;通常只想调用这些方法之一。
当你的作业在onStartJob(JobParameters(中执行时,一定要使用getNetwork((返回的特定网络,否则你将使用可能不满足此约束的默认网络。
有关更多详细信息,请访问上述答案的来源 https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiredNetwork(android.net.NetworkRequest(