Код: Выделить всё
private fun scheduleNextSyncWorker(context: Context) {
val nextScheduleDelay = 60000L
val test = OneTimeWorkRequestBuilder()
.setInitialDelay(nextScheduleDelay, TimeUnit.MILLISECONDS)
.setConstraints(
Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.build()
)
.addTag("test")
.build()
WorkManager.getInstance(context)
.enqueueUniqueWork("test", ExistingWorkPolicy.REPLACE, test)
}
class TestWorker(appContext: Context, workerParameters: WorkerParameters) : CoroutineWorker(appContext, workerParameters) {
override suspend fun doWork(): Result {
try {
withContext(Dispatchers.IO) {
val connectivityManager = applicationContext.connectivityManager()
var waitedMillis = 0L
var waitedSince = System.currentTimeMillis()
// Added this to check if it is connected and usually this is false
while(connectivityManager.activeNetworkInfo?.isConnected != true && waitedMillis < 10000) {
Log.d("TEST", "connected: ${connectivityManager.activeNetworkInfo?.isConnected}")
waitedMillis = System.currentTimeMillis() - waitedSince
delay(1000)
}
// Api calls here which mostly fail because no internet connection
}
return Result.success()
} catch (t: Throwable) {
return Result.failure()
} finally {
GlobalScope.launch {
// Probably not the best way, but the worker needs to pass back that we succeeded or failed before we will schedule the next
delay(1000)
scheduleNextSyncWorker(applicationContext)
}
}
}
}
Как вы можете видеть в коде, у меня есть дополнительный код, чтобы проверить, подключены ли мы в данный момент, что, когда устройство заблокировано, в основном ложно. Иногда через несколько секунд мы восстанавливаем доступ в Интернет, но иногда нет.
Я думал, что WorkManager должен был вызывать doWork только в том случае, если ограничения соблюдены. Но поскольку у меня нет активного соединения, я не знаю, как мне продолжать. Кажется тривиальным добавить полную проверку сети внутри воркера, хотя он должен проверять ее сам.
Есть какие мысли?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -no-active
Мобильная версия