Sobes.tech
Middle

Como devolver o resultado do trabalho do WorkManager para a aplicação?

sobes.tech IA

Resposta da IA

Pode usar Observer num objeto LiveData<WorkInfo> ou LiveData<List<WorkInfo>>, obtido do WorkManager por id ou por tag. No WorkInfo, há um campo outputData que contém o resultado.

Exemplo de obtenção de LiveData:

// Obter LiveData por id
val workInfoByIdLiveData: LiveData<WorkInfo> =
    WorkManager.getInstance(context).getWorkInfoByIdLiveData(workId)

// Obter LiveData por tag
val workInfoByTagLiveData: LiveData<List<WorkInfo>> =
    WorkManager.getInstance(context).getWorkInfosByTagLiveData(tag)

Exemplo de observação do resultado:

// Observar `LiveData<WorkInfo>`
workInfoByIdLiveData.observe(lifecycleOwner, Observer { workInfo ->
    if (workInfo != null && workInfo.state.isFinished) {
        val resultData = workInfo.outputData
        // Processar o resultado de resultData
    }
})

Dentro do Worker, o resultado é devolvido usando Result.success(Data).

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

    override fun doWork(): Result {
        // Executar trabalho em segundo plano
        val outputData = Data.Builder()
            .putString("result_key", "Sucesso!")
            .build()
        return Result.success(outputData)
    }
}