Я исправил это так. Я думаю, что это должно работать:
планирование фона:
Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(SyncWorker.class,15, TimeUnit.MINUTES).setConstraints(constraints).build();
WorkManager.getInstance().enqueueUniquePeriodicWork(SyncWorker.BACKGROUND_SYNC, ExistingPeriodicWorkPolicy.KEEP, workRequest);
передний план / активная синхронизация c:
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(SyncWorker.class).build();
WorkManager.getInstance().enqueueUniqueWork(SyncWorker.FOREGROUND_SYNC, ExistingWorkPolicy.KEEP, workRequest);
Для управления синхронизацией фона и переднего плана:
public class SyncWorker extends Worker {
public final static String FOREGROUND_SYNC = "FOREGROUND";
public final static String BACKGROUND_SYNC = "BACKGROUND";
private static boolean isWorking = false;
public SyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
if(isWorking) {
return Result.failure();
}
isWorking = true;
// sync
isWorking = false;
return Result.success();
}
}