首页 > 解决方案 > JobScheduler-NETWORK_TYPE_NONE 给出 IllegalArgumentException

问题描述

我正在使用下面的代码来安排工作服务。

JobScheduler jobScheduler = (JobScheduler) mContext.getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
                    if (jobScheduler != null) {
                        try {
                            jobScheduler.schedule(AppJobService.createJobInfo(mContext.getApplicationContext(), account));
                        } catch (IllegalArgumentException e) {
                            CrashLogger.logException(e);
                        }
                    }

public static JobInfo createJobInfo(@NonNull Context context, Account account) {
        Gson g = new Gson();
        String json = g.toJson(account);
        PersistableBundle bundle = new PersistableBundle();
        bundle.putString("Account", json);
        JobInfo.Builder builder = new JobInfo.Builder(3, new ComponentName(context, AppJobService.class))
                .setExtras(bundle)
                .setRequiredNetworkType(NETWORK_TYPE_NONE)
                .setRequiresDeviceIdle(false).setPersisted(false);


        return builder.build();
    }

但低于例外

2018-12-03 17:51:22.360 5032-5557/? W/System.err:java.lang.IllegalArgumentException:您正在尝试构建一个没有约束的作业,这是不允许的。

但是当我改变它时setRequiredNetworkType(NETWORK_TYPE_NONE)setRequiredNetworkType(NETWORK_TYPE_ANY)它工作正常。但我希望我的工作服务即使在没有网络连接的情况下也能运行。为什么我得到 NETWORK_TYPE_NONE 异常?

标签: androidillegalargumentexceptionandroid-jobschedulerjobservice

解决方案


您必须有某种约束,否则它总是会抛出 IllegalArgumentException,放置任何类型的约束或仅使用 AlarmManager 或 WorkManager 查看代码片段,这是来自 Android 源代码

        public JobInfo build() {
        // Allow jobs with no constraints - What am I, a database?
        if (!mHasEarlyConstraint && !mHasLateConstraint && mConstraintFlags == 0 &&
                mNetworkRequest == null &&
                mTriggerContentUris == null) {
            throw new IllegalArgumentException("You're trying to build a job with no " +
                    "constraints, this is not allowed.");
        }

我有同样的问题,我只是使用 AlarmManager 代替


推荐阅读