У меня есть диспетчер заданий 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.