JobService NETWORK_TYPE_NOT_ROAMING无法在Android 8 Oreo API 26仿真器中运行

问题描述 投票:0回答:1

如果用户没有漫游,我们的应用程序使用作业服务进行后台工作。这就是我们安排工作的方式:

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 Emulator API 24中,Job将触发,一切都很棒。在Android Emulator API 26中,作业不会触发:(

有任何想法吗? :)

android android-jobscheduler android-8.0-oreo roaming jobservice
1个回答
1
投票

调用setRequiredNetworkType将网络定义为对您的工作的严格要求。如果请求的网络不可用,您的工作将永远不会运行。请参阅setOverrideDeadline(long)以更改此行为。调用此方法将覆盖先前由setRequiredNetwork(NetworkRequest)定义的任何要求;您通常只想调用其中一种方法。

当您的作业在onStartJob(JobParameters)中执行时,请务必使用getNetwork()返回的特定网络,否则您将使用可能不符合此约束的默认网络。

有关更多详细信息,请转到上面的答案https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiredNetwork(android.net.NetworkRequest)

© www.soinside.com 2019 - 2024. All rights reserved.