JobScheduler-NETWORK_TYPE_NONE дает исключение IllegalArgumentException - PullRequest
0 голосов
/ 03 декабря 2018

Я использую приведенный ниже код для планирования работы службы.

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?

1 Ответ

0 голосов
/ 03 декабря 2018

У вас должно быть какое-то ограничение, или оно всегда выдаст исключение 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

...