How to configure a Datawedge profile programatically in an Android Kotlin app?

P Pierrick Valentin 4 days 9 hours ago
8 0 0

I am developing an Android inventory app in Kotlin for Zebra TC21 devices, and I would like to configure a Datawedge profile programmatically. I need to scan qr codes with the integrated scanner, and RFID tags with a Zebra RFD4031. I would like the scanned data to be transmitted by "Intent output" with Broadcast mode. I also want the "key output" to be disabled.

I tried with this code:

class DatawedgeConfig {

  val baseConfig = createBaseConfig()

 

  fun initialize(context: Context) {

    try {

      createProfile(context)

      configureProfile(context)

      configureInput(context)

      configureOutput(context)

      Log.d("DatawedgeConfig", "DataWedge initialized successfully")

    } catch (e: Exception) {

      Log.e("DatawedgeConfig", "Error initializing DataWedge", e)

    }

  }

 

  private fun createBaseConfig(): Bundle {

    return Bundle().apply {

      putString("PROFILE_NAME", DATAWEDGE_PROFILE_NAME)

      putString("PROFILE_ENABLED", "true")

      putString("CONFIG_MODE", "UPDATE")

    }

  }

 

  fun createProfile(context: Context) {

    val intent = Intent()

    intent.action = "com.symbol.datawedge.api.ACTION"

    intent.putExtra("com.symbol.datawedge.api.CREATE_PROFILE", DATAWEDGE_PROFILE_NAME)

    try {

      context.sendBroadcast(intent)

      Log.d("DatawedgeConfig", "Profile created successfully")

    } catch (e: Exception) {

      Log.e("DatawedgeConfig", "Error creating profile", e)

    }

  }

 

  fun configureProfile(context: Context) {

    val intent = Intent()

    intent.action = "com.symbol.datawedge.api.ACTION"

    intent.putExtra("com.symbol.datawedge.api.SET_CONFIG", Bundle().apply {

      baseConfig.putParcelableArray("APP_LIST", arrayOf(Bundle().apply {

        putString("PACKAGE_NAME", context.packageName)

        putStringArray("ACTIVITY_LIST", arrayOf("*"))

      }))

    })

 

    Log.d("DataWedgeConfig", "Configuring profile: $baseConfig")

 

    try {

      context.sendBroadcast(intent)

      Log.d("DatawedgeConfig", "Profile configured successfully (PACKAGE_NAME : ${context.packageName})")

    } catch (e: Exception) {

      Log.e("DatawedgeConfig", "Error configuring profile", e)

    }

  }

 

  fun configureInput(context: Context) {

    val intent = Intent()

    intent.action = "com.symbol.datawedge.api.ACTION"

    intent.putExtra("com.symbol.datawedge.api.SET_CONFIG", Bundle().apply {

      baseConfig.putParcelableArray("PLUGIN_CONFIG", arrayOf(Bundle().apply {

        putString("PLUGIN_NAME", "BARCODE")

        putString("RESET_CONFIG", "true")

        putBundle("PARAM_LIST", Bundle().apply {

          putString("scanner_selection", "auto")

          putString("decoder_rfid", "true")

          putString("decoder_qr_code", "true")

        })

      }))

    })

    try {

      context.sendBroadcast(intent)

      Log.d("DatawedgeConfig", "Input configured successfully")

    } catch (e: Exception) {

      Log.e("DatawedgeConfig", "Error configuring input", e)

    }

  }

 

  fun configureOutput(context: Context) {

    val intent = Intent()

    intent.action = "com.symbol.datawedge.api.ACTION"

    intent.putExtra("com.symbol.datawedge.api.SET_CONFIG", Bundle().apply {

      baseConfig.putParcelableArray("PLUGIN_CONFIG", arrayOf(Bundle().apply {

        putString("PLUGIN_NAME", "INTENT")

        putString("RESET_CONFIG", "true")

        putBundle("PARAM_LIST", Bundle().apply {

          putString("intent_output_enabled", "true")

          putString("intent_action", DATAWEDGE_ACTION)

          putString("intent_delivery", "2")

        })

      }))

    })

    try {

      context.sendBroadcast(intent)

      Log.d("DatawedgeConfig", "Output configured successfully")

    } catch (e: Exception) {

      Log.e("DatawedgeConfig", "Error configuring output", e)

    }

  }

}

 

The profile is actually created if it doesn't exist, but none of the options in the "SET_CONFIG" bundle is apllied. So, my app isn't associated with the created profile, and the intent output isn't neither enabled nor configured with the given values.

I don't understand why.

CONTACT
Can’t find what you’re looking for?