Reputation: 3058
With: implementation "androidx.work:work-runtime:2.3.4"
I'm trying to implement custom initialization to enable more verbose logging according to these instructions.
The first snippet has one line bad: return Configuration.Builder()
needs to be return new Configuration.Builder()
.
I extended Application as shown like this:
class MyApplication extends Application implements Configuration.Provider {
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build();
}
}
I initiate the worker like this:
WorkManager.getInstance(getApplicationContext());
And yet even after all of that I get the application to crash with this complaint:
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.
Even though the instructions states:
You do not need to call WorkManager.initialize() yourself
Upvotes: 8
Views: 16613
Reputation: 315
You have to define worker factory in new version like this:
@HiltAndroidApp
class MyApp() : Application(), Configuration.Provider {
@Inject
lateinit var workerFactory : HiltWorkerFactory
override val workManagerConfiguration: Configuration
get() = Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
Upvotes: 0
Reputation: 151
Add this to your Manifest.xml inside the application tag.
<application>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
<application>
Upvotes: 0
Reputation: 913
Please refer to this link: https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration#custom
OR
Initialize your custom WorkManager like this:
// provide custom configuration
val myConfig = Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.build()
// initialize WorkManager
WorkManager.initialize(this, myConfig)
Upvotes: 7
Reputation: 6476
You need to implement the Configuration.Provider
interface in your Application class to provide a custom configuration using WorkManager's on-demand initialization.
This is explained with some sample code in the Advanced WorkManager codelab:
class BlurApplication : Application(), Configuration.Provider {
override fun getWorkManagerConfiguration(): Configuration =
Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.DEBUG)
.build()
...
}
Please be sure to have this Application class included in you AndroidManifest.xml
:
<application
android:name=".BlurApplication"
Doing so, the first time you request WorkManager instance with getInstance(context)
the library will be initialized with your custom configuration.
Upvotes: 3