47
loading...
This website collects cookies to deliver better user experience
build.gradle(Module)
dependencies {
implementation "androidx.work:work-runtime-ktx:2.5.0"
androidTestImplementation "androidx.work:work-testing:2.5.0"
testImplementation "androidx.work:work-testing:2.5.0"
}
class SomeWork(appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {
override fun doWork(): Result {
val user: User = User("John Doe", 32)
print(user.toString())
return Result.success()
}
}
SomeWork
que estende Worker
instancia um objeto do tipo User e imprime o resultado no terminal. Nos exemplos a seguir veremos como passar User via parâmetro com hilt //Criando request
val doSomeWorkRequest: WorkRequest =
PeriodicWorkRequestBuilder<SomeWork>(15,TimeUnit.Minutes)
.build()
//Enviando para o sistema
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(
"AppNameSomeWork",
ExistingPeriodicWorkPolicy.KEEP,
doSomeWorkRequest
)
print(user.toString())
dentro no método doWork()
na classe SomeWork
build.gradle(Project)
buildscript {
//...
dependencies {
//...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.37'
}
}
build.gradle(Module)
//...
plugins {
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
android {
//...
//O Hilt usa recursos do Java 8, ativar o Java 8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
//...
annotationProcessorOptions {
//O importante aqui é substituir = por += caso seu
//projeto não esteja assim
arguments += [... ]
}
}
}
kapt {
correctErrorTypes true
}
dependencies {
//Dagger - Hilt
implementation 'com.google.dagger:hilt-android:2.37'
kapt 'com.google.dagger:hilt-compiler:2.37'
kapt 'androidx.hilt:hilt-compiler:1.0.0'
implementation 'androidx.hilt:hilt-work:1.0.0'
implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03'
}
AppNameApplication.kt
@HiltAndroidApp
class AppNameApplication : Application() {
override fun onCreate() {
super.onCreate()
//...
}
}
Worker
então vamos lá.AppModule.kt
@InstallIn(SingletonComponent::class)
@Module
object AppModule {
@Singleton
@Provides
fun provideUser(): User{
return User("John Doe", 32)
}
}
@HiltWorker
class SomeWork @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
val user: User):
Worker(appContext, workerParams) {
override fun doWork(): Result {
print(user.toString())
return Result.success()
}
}
SomeWork
mas ainda precisamos fazer mais algumas coisas para tudo funcionar. O sistema cria uma instancia de WorkManager
com uma configuração padrão, precisamos criar uma nova configuração para tudo funcionar corretamente.AndroidManifest.xml
<!--Dentro da Tag application-->
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
AppNameApplication.kt
@HiltAndroidApp
class AppNameApplication : Application() {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
}