【问题标题】:JobService NETWORK_TYPE_NOT_ROAMING not working in Android 8 Oreo API 26 EmulatorJobService NETWORK_TYPE_NOT_ROAMING 在 Android 8 Oreo API 26 模拟器中不起作用
【发布时间】:2018-03-21 10:07:43
【问题描述】:

如果用户没有漫游,我们的应用会使用 Job Service 进行后台工作。 这就是我们安排工作的方式:

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

有什么想法吗? :)

【问题讨论】:

    标签: android android-jobscheduler android-8.0-oreo roaming jobservice


    【解决方案1】:

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

    当你的作业在 onStartJob(JobParameters) 中执行时,一定要使用 getNetwork() 返回的特定网络,否则你将使用可能不满足此约束的默认网络。 p>

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

    【讨论】:

    • 感谢您的详细解答!我现在就试试。为什么您认为这在 Android 7 中有效,但在 Android 8 中无效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2018-08-13
    • 2019-03-03
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多