Есть ли способ передать workInfo.getRunAttemptCount () из моей MainActivity классу, расширяющему Worker? Таким образом, я могу отслеживать количество повторных попыток и повторять их для 3 итераций и вызывать состояние RESULT.failure () внутри doWork () после 3 попыток, если запрос не был успешным.
Код:
public Result doWork() {
Integer retryAttemptCount = getInputData().getInt("retryAttempts",0);
Log.e(TAG, "doWork: Work is done." + System.currentTimeMillis());
if (retryAttemptCount > 3)
return Result.failure();
else
return Result.retry();
}
MainActivity
private void setPeriodicWorkRequest(){
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
// Exponential retry with a min of 15 minutes during retry.
PeriodicWorkRequest periodicWork = new
PeriodicWorkRequest.Builder(MyPeriodicWork.class, 15, TimeUnit.MINUTES)
.addTag("periodic_work")
.setBackoffCriteria(BackoffPolicy.EXPONENTIAL, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("periodic_work", ExistingPeriodicWorkPolicy.KEEP, periodicWork);
WorkManager.getInstance(getApplicationContext()).getWorkInfoByIdLiveData(periodicWork.getId())
.observe(this, new Observer<WorkInfo>() {
@Override
public void onChanged(@Nullable WorkInfo workInfo) {
Data.Builder data = new Data.Builder();
if (workInfo != null && workInfo.getRunAttemptCount() > 0) {
// Passing params
data.putInt("retryAttempts", workInfo.getRunAttemptCount());
}else{
data.putInt("retryAttempts", 0);
}
}
});
}