elig
elig

Reputation: 3058

WorkManager custom initialization complains about WorkManager#initialize

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

Answers (4)

Reza Zavareh
Reza Zavareh

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

Muzammal Abdul Ghafoor
Muzammal Abdul Ghafoor

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

MojoJojo
MojoJojo

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

pfmaggi
pfmaggi

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

Related Questions