Изменить период периодической задачи в Firebase JobDispatcher?

Я использовал менеджер сети GCM, но потом я услышал, что Firebase JobDispatcher включает в себя GCM плюс другие функции, поэтому я пытаюсь использовать это. Я успешно запрограммировал периодическое задание, и оно отлично работает, но проблема в том, что мне нужно изменить период, а не фиксировать его с самого начала.

Причина в том, что я использую сервис распознавания активности и хочу, чтобы в следующий раз JobDispatcher выполнял периодическую задачу на основе обнаруженной текущей активности. Например, если вы идете, следующий раз, когда задание будет запущено, через 30 минут, а если вы в машине, то это будет 5 минут (в основном потому, что если вы в машине, ваш телефон более вероятно обеспечит различные значения местоположения за короткое время по сравнению с тем, когда вы пешком).

Это способ, которым я программирую периодическую задачу, так как вы видите, что я устанавливаю фиксированное значение, я хочу знать, может ли служба, запускаемая этой задачей, предоставить обратную связь, которая изменит период задачи.

 final Builder builder = jobDispatcher.newJobBuilder()
                .setTag(form.tag.get())
                .setRecurring(form.recurring.get())
                .setLifetime(form.persistent.get() ? Lifetime.FOREVER : Lifetime.UNTIL_NEXT_BOOT)
                .setService(DemoJobService.class)
                .setTrigger(Trigger.executionWindow(
                    form.getWinStartSeconds(), form.getWinEndSeconds()))
                .setReplaceCurrent(form.replaceCurrent.get())
                .setRetryStrategy(jobDispatcher.newRetryStrategy(
                    form.retryStrategy.get(),
                    form.getInitialBackoffSeconds(),
                    form.getMaximumBackoffSeconds()));

            if (form.constrainDeviceCharging.get()) {
                builder.addConstraint(Constraint.DEVICE_CHARGING);
            }
            if (form.constrainOnAnyNetwork.get()) {
                builder.addConstraint(Constraint.ON_ANY_NETWORK);
            }
            if (form.constrainOnUnmeteredNetwork.get()) {
                builder.addConstraint(Constraint.ON_UNMETERED_NETWORK);
            }

0 ответов

Для этого вам понадобится onStartJob в DemoJobService.class отменить себя, используя свой тег, который вы сохранили в SharedPrefs / elsewhere (form.tag.get() в вашем примере):

FirebaseJobDispatcher(GooglePlayDriver(context)).cancel(yourTag)

Затем он может перепланировать работу с обновленными параметрами. К сожалению, в настоящее время нет возможности редактировать вакансии, их нужно отменить и создать заново!