Назад к вопросам
Middle
415
questionbank

Как вернуть результат работы WorkManager в приложение?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Можно использовать Observer на объекте LiveData<WorkInfo> или LiveData<List<WorkInfo>>, полученном из WorkManager по id или тегу. В WorkInfo содержится поле outputData, в котором хранится результат.

Пример получения LiveData:

// Получение LiveData по id
val workInfoByIdLiveData: LiveData<WorkInfo> =
    WorkManager.getInstance(context).getWorkInfoByIdLiveData(workId)

// Получение LiveData по тегу
val workInfoByTagLiveData: LiveData<List<WorkInfo>> =
    WorkManager.getInstance(context).getWorkInfosByTagLiveData(tag)

Пример наблюдения за результатом:

// Наблюдение за LiveData<WorkInfo>
workInfoByIdLiveData.observe(lifecycleOwner, Observer { workInfo ->
    if (workInfo != null && workInfo.state.isFinished) {
        val resultData = workInfo.outputData
        // Обработка результата из resultData
    }
})

Внутри Worker результат возвращается с помощью Result.success(Data).

class MyWorker(appContext: Context, workerParams: WorkerParameters):
    Worker(appContext, workerParams) {

    override fun doWork(): Result {
        // Выполнение фоновой работы
        val outputData = Data.Builder()
            .putString("result_key", "Успех!")
            .build()
        return Result.success(outputData)
    }
}