Диспетчер заданий Firebase не планирует задания на устройствах OREO - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть диспетчер заданий firebase, запуск которого запланирован при любых изменениях сети, задание отлично работает на устройстве с маршмеллоу (23 уровня API), но тот же код при запуске не выполняет планирование заданий на устройстве oreo (уровень API 26))

Вот мой код службы работы:

public class MyJobService extends JobService {


@Override
public boolean onStartJob(JobParameters job) {

    Log.d("Executing","Job");
    Realm realm = Realm.getDefaultInstance();

    RealmResults<JsontoSend> realmResults = realm.where(JsontoSend.class).findAll();
   if(!realmResults.isEmpty()) {
        for (JsontoSend jsontoSend : realmResults) {
            final Intent intent = new Intent(getApplicationContext(), PostUploadIntentService.class);
            intent.putExtra("object", jsontoSend.getJson());
            new Thread(new Runnable() {
                @Override
                public void run() {
                    startService(intent);
                }
            }).run();
        }
    }


    return true;
}

@Override
public boolean onStopJob(JobParameters job) {
        Log.d("instopjob","cancelled");
        return true;

    }
}

Это мой код, где я создал работу:

 synchronized  public static void schedule(@NonNull final Context context){
    if(sInitialized)
        return;

    Driver driver=new GooglePlayDriver(context);
    FirebaseJobDispatcher dispatcher=new FirebaseJobDispatcher(driver);

    Job myJob = dispatcher.newJobBuilder()
            .setService(MyJobService.class)
            .setTag(JOB_TAG)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(5, 60))
            .setLifetime(Lifetime.FOREVER)
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .setReplaceCurrent(false)
            .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
            .build();

    dispatcher.schedule(myJob);
    sInitialized=true;

}

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

1 Ответ

0 голосов
/ 12 ноября 2018

Ну, проблема здесь, вероятно, в том, что вы используете GooglePlayDriver, который полагается на сервисы Google Play, которые будут представлены на устройствах. Если услуги недоступны, работа не будет запланирована. Поэтому, если вы нацеливаетесь на устройства выше 5.0 (что в большинстве случаев верно), вы должны использовать Android JobScheduler , встроенный после lollipop.

...