How to Initialize Anyline Mobile SDK

The SDK initialization is a required step in order to use Anyline Mobile SDK. It performs important operations to ensure the scanning process can happen, such as:

  • Authenticates your license key;

  • Validates and copies necessary files to the device;

  • Initializes other objects in the environment.

The previous AnylineSdk.init(String, Context) call has been deprecated in version 54.6.0. Please use one of the following methods to ensure correct SDK initialization.

Initialization Strategies

Option 1: Initialize in background

This initialization strategy is the recommended way for most cases, as it allows the SDK to decide the best time to perform the necessary tasks by monitoring network conditions and scanner utilization.

  • Kotlin

  • Java

class MainApplication: Application() {
    override fun onCreate() {
        super.onCreate()

        AnylineSdk.init(this, SdkInitializationConfig(
            sdkInitializationParameters = SdkInitializationParameters("myLicenseKey"),
            sdkInitializationStrategy = SdkInitializationStrategy.AsyncAuto(object: SdkInitializationListener {
                override fun onInitializationStarted() {
                    Log.d("AnylineSdkInit", "Anyline SDK initialization in progress...")
                }

                override fun onInitializationFailed(state: SdkInitializationState.NotInitialized) {
                    Log.e("AnylineSdkInit", "Anyline SDK not initialized: ${state.lastError?.exception?.message}")
                }

                override fun onInitializationSucceeded(state: SdkInitializationState.Initialized) {
                    Log.d("AnylineSdkInit", "Anyline SDK initialized!")
                }
            }))
        )
    }
}
public class MainApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        try {
            AnylineSdk.init(this, new SdkInitializationConfig(
                    new SdkInitializationParameters("myLicenseKey"),
                    new SdkInitializationStrategy.AsyncAuto(new SdkInitializationListener() {
                        @Override
                        public void onInitializationStarted() {
                            Log.d("AnylineSdkInit", "Anyline SDK initialization in progress...");
                        }

                        @Override
                        public void onInitializationFailed(@NonNull SdkInitializationState.NotInitialized notInitialized) {
                            String errorMessage = "";
                            SdkInitializationError lastError = notInitialized.getLastError();
                            if (lastError != null) {
                                errorMessage = lastError.getException().getMessage();
                            }
                            Log.e("AnylineSdkInit", "Anyline SDK not initialized: " + errorMessage + ".");
                        }

                        @Override
                        public void onInitializationSucceeded(@NonNull SdkInitializationState.Initialized initialized) {
                            Log.d("AnylineSdkInit", "Anyline SDK initialized!");
                        }
                    }, null)));
        } catch (Exception e) {
            Log.e("AnylineSdkInit", "Anyline SDK not initialized: " + e.getMessage() + ".");
        }
    }
}

Option 2: Initialize using blocking call

Replaces the previous AnylineSdk.init(String, Context) call. This method is only recommended if you use an offline license and want to have autonomy over when exactly the SDK is initialized.

  • Kotlin

  • Java

try {
    AnylineSdk.init(context, SdkInitializationConfig(
        sdkInitializationParameters = SdkInitializationParameters("myLicenseKey"),
        sdkInitializationStrategy = SdkInitializationStrategy.SyncManual))
    Log.d("AnylineSdkInit", "Anyline SDK initialized!")
} catch (e: Exception) {
    Log.e("AnylineSdkInit", "Anyline SDK not initialized: ${e.message.toString()}.")
}
try {
    AnylineSdk.init(context, new SdkInitializationConfig(
        new SdkInitializationParameters("myLicenseKey"),
        SdkInitializationStrategy.SyncManual.INSTANCE));
    Log.d("AnylineSdkInit", "Anyline SDK initialized!");
} catch (Exception e) {
    Log.e("AnylineSdkInit", "Anyline SDK not initialized: " + e.getMessage().toString() + ".");
}

Option 3: Initialize using the ContentProvider

This is the easiest way to initialize the SDK. All you need to do is let your application implement AnylineSdkInitializationContentProviderInterface and provide the SDK initialization parameters by calling AnylineSdkInitializationContentProviderHandler.proceedWithSdkInitializationParameters(SdkInitializationParameters) . The same criteria as for the background strategy will be used to define the best time to initialize the SDK.

  • Kotlin

  • Java

class MainApplication: Application(), AnylineSdkInitializationContentProviderInterface {
    override fun onAnylineSdkInitializationContentProviderHandlerAvailable(
        initializationHandler: AnylineSdkInitializationContentProviderHandler) {

        val mySdkInitializationParameters = SdkInitializationParameters(
            licenseKey = "myLicenseKey"
        )
        initializationHandler.proceedWithSdkInitializationParameters(mySdkInitializationParameters)
    }


    override fun onAnylineSdkInitializationContentProviderMessage(message: String) {
        Log.d("AnylineSdkInitProvider", message)
    }
}
public class MainApplication extends Application implements AnylineSdkInitializationContentProviderInterface {
    @Override
    public void onAnylineSdkInitializationContentProviderHandlerAvailable(
            @NonNull AnylineSdkInitializationContentProviderHandler initializationHandler) {
        SdkInitializationParameters mySdkInitializationParameters =
                new SdkInitializationParameters("myLicenseKey");
        initializationHandler.proceedWithSdkInitializationParameters(mySdkInitializationParameters);
    }

    @Override
    public void onAnylineSdkInitializationContentProviderMessage(@NonNull String message) {
        Log.d("AnylineSdkInitProvider", message);
    }
}
If you have provided the requested parameters correctly and the SDK is still not initializing, please check if the provider io.anyline2.init.SdkInitializationContentProvider is merged into your application manifest.

Observing SDK initialization state

You can observe the initialization state of the SDK at any time using the initializationState LiveData object.

  • Kotlin

  • Java

AnylineSdk.initializationState.observe(this) { sdkInitializationState ->
    when (sdkInitializationState) {
        is SdkInitializationState.NotInitialized -> {
            sdkInitProgressBar.visibility = View.GONE
            startScanningButton.visibility = View.GONE
        }
        is SdkInitializationState.InProgress -> {
            sdkInitProgressBar.visibility = View.VISIBLE
            startScanningButton.visibility = View.GONE
        }
        is SdkInitializationState.Initialized -> {
            sdkInitProgressBar.visibility = View.GONE
            startScanningButton.visibility = View.VISIBLE
        }
    }
}
AnylineSdk.getInitializationState().observe(this, sdkInitializationState -> {
    if (sdkInitializationState instanceof SdkInitializationState.NotInitialized) {
        sdkInitProgressBar.setVisibility(View.GONE);
        startScanningButton.setVisibility(View.GONE);
    } else if (sdkInitializationState instanceof SdkInitializationState.InProgress) {
        sdkInitProgressBar.setVisibility(View.VISIBLE);
        startScanningButton.setVisibility(View.GONE);
    } else if (sdkInitializationState instanceof SdkInitializationState.Initialized) {
        sdkInitProgressBar.setVisibility(View.GONE);
        startScanningButton.setVisibility(View.VISIBLE);
    }
});
If you use any background initialization strategy, you must wait for the event onScanViewLoaded to occur before performing any operations with ScanView, since the SDK initialization may not yet be complete during the ScanView constructor. For more details, please see Initialize the ScanView.