Workmanager по -прежнему не инициализируется должным образом при использовании DelegatingWorkerAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Workmanager по -прежнему не инициализируется должным образом при использовании DelegatingWorker

Сообщение Anonymous »

Мой рабочий < /p>

@HiltWorker
class MyWorker @AssistedInject constructor(
@Assisted context: Context,
@Assisted workerParams: WorkerParameters,
) : CoroutineWorker(context, workerParams) {

override suspend fun doWork(): Result {
Timber.d("doWork")

return try {
Result.success()
} catch (e: Exception) {
Result.failure()
}
}

companion object {
fun enqueueWork(context: Context) {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()

val workRequest = OneTimeWorkRequestBuilder()
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.setConstraints(constraints)
.setInputData(VpnOnRevokeWorker::class.delegatedData())
.build()

WorkManager.getInstance(context)
.enqueue(workRequest)
}
}
}
< /code>
Я использую Google DelegatingWorker для пропуска конфигурации Workmanager в классе приложения: < /p>

import android.content.Context
import androidx.hilt.work.HiltWorkerFactory
import androidx.work.CoroutineWorker
import androidx.work.Data
import androidx.work.ForegroundInfo
import androidx.work.WorkerParameters
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.components.SingletonComponent
import kotlin.reflect.KClass

/**
* An entry point to retrieve the [HiltWorkerFactory] at runtime
*/
@EntryPoint
@InstallIn(SingletonComponent::class)
interface HiltWorkerFactoryEntryPoint {
fun hiltWorkerFactory(): HiltWorkerFactory
}

private const val WORKER_CLASS_NAME = "RouterWorkerDelegateClassName"

/**
* Adds metadata to a WorkRequest to identify what [CoroutineWorker] the [DelegatingWorker] should
* delegate to
*/
internal fun KClass.delegatedData() =
Data.Builder()
.putString(WORKER_CLASS_NAME, qualifiedName)
.build()

/**
* A worker that delegates sync to another [CoroutineWorker] constructed with a [HiltWorkerFactory].
*
* This allows for creating and using [CoroutineWorker] instances with extended arguments
* without having to provide a custom WorkManager configuration that the app module needs to utilize.
*
* In other words, it allows for custom workers in a library module without having to own
* configuration of the WorkManager singleton.
*/
class DelegatingWorker(
appContext: Context,
workerParams: WorkerParameters,
) : CoroutineWorker(appContext, workerParams) {

private val workerClassName =
workerParams.inputData.getString(WORKER_CLASS_NAME) ?: ""

private val delegateWorker =
EntryPointAccessors.fromApplication(appContext)
.hiltWorkerFactory()
.createWorker(appContext, workerClassName, workerParams)
as? CoroutineWorker
?: throw IllegalArgumentException("Unable to find appropriate worker")

override suspend fun getForegroundInfo(): ForegroundInfo =
delegateWorker.getForegroundInfo()

override suspend fun doWork(): Result =
delegateWorker.doWork()
}
< /code>
Но я все еще получаю эту ошибку: < /p>
java.lang.IllegalStateException: WorkManager is not initialized properly.
You have explicitly disabled WorkManagerInitializer in your manifest,
have not manually called WorkManager#initialize at this point,
and your Application does not implement Configuration.Provider.
at androidx.work.impl.WorkManagerImpl.getInstance(WorkManagerImpl.java:179)
at androidx.work.WorkManager$Companion.getInstance(WorkManager.kt:173)


Подробнее здесь: https://stackoverflow.com/questions/792 ... tingworker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»