79230506

Date: 2024-11-27 13:35:51
Score: 0.5
Natty:
Report link

I've finally found a solution. I share it for those who'd be interested:

import android.content.Context
import android.content.Intent
import android.os.Bundle
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class DWConfig @Inject constructor(
    @ApplicationContext private val context: Context,
) {
    val setConfigBundle = Bundle().apply {
        putString("PROFILE_NAME", DATAWEDGE_PROFILE_NAME)
        putString("PROFILE_ENABLED", "true")
        putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST")
    }

    val appConfig = Bundle().apply {
        putString("PACKAGE_NAME", context.packageName)
        putStringArray(
            "ACTIVITY_LIST", arrayOf(
                "${context.packageName}.MainActivity",
            )
        )
    }

    val barcodeParamList = Bundle().apply {
        putString("scanner_input_enabled", "true")
        putString("scanner_selection", "auto")
        putString("charset_name", "ISO-8859-1")
        putString("auto_charset_preferred_order", "UTF-8;GB2312")
        putString("auto_charset_failure_option", "UTF-8")
        putString("volume_slider_type", "3")
    }

    val barcodeConfigBundle = Bundle().apply {
        putString("PLUGIN_NAME", "BARCODE")
        putString("RESET_CONFIG", "true")
    }

    val intentParamList = Bundle().apply {
        putString("intent_output_enabled", "true")
        putString("intent_action", DATAWEDGE_INTENT_ACTION)
        putString("intent_delivery", "2")
    }

    val intentConfigBundle = Bundle().apply {
        putString("PLUGIN_NAME", "INTENT")
        putString("RESET_CONFIG", "true")
    }

    val rfidParamList = Bundle().apply {
        putString("rfid_input_enabled", "true")
        putString("rfid_beeper_enable", "false")
        putString("rfid_led_enable", "true")
        putString("rfid_antenna_transmit_power", "30")
        putString("rfid_memory_bank", "3")
        putString("rfid_session", "1")
        putString("rfid_trigger_mode", "0")
        putString("rfid_filter_duplicate_tags", "true")
        putString("rfid_hardware_trigger_enabled", "true")
        putString("rfid_tag_read_duration", "250")
    }

    val rfidConfigBundle = Bundle().apply {
        putString("PLUGIN_NAME", "RFID")
        putString("RESET_CONFIG", "true")
    }

    val keystrokeParamList = Bundle().apply {
        putString("keystroke_output_enabled", "false")
    }

    val keystrokeConfigBundle = Bundle().apply {
        putString("PLUGIN_NAME", "KEYSTROKE")
        putString("RESET_CONFIG", "true")
    }

    private fun setAppList() {
        setConfigBundle.putParcelableArray(
            "APP_LIST", arrayOf(
                appConfig
            )
        )
    }
    
    private fun setPluginConfig() {
        setConfigBundle.remove("PLUGIN_CONFIG")
        barcodeConfigBundle.putBundle("PARAM_LIST", barcodeParamList)
        intentConfigBundle.putBundle("PARAM_LIST", intentParamList)
        rfidConfigBundle.putBundle("PARAM_LIST", rfidParamList)
        keystrokeConfigBundle.putBundle("PARAM_LIST", keystrokeParamList)

        setConfigBundle.putParcelableArrayList(
            "PLUGIN_CONFIG", arrayListOf(
                barcodeConfigBundle,
                intentConfigBundle,
                rfidConfigBundle,
                keystrokeConfigBundle
            )
        )
    }

    private fun sendConfig() {
        val intent = Intent().apply {
            action = "com.symbol.datawedge.api.ACTION"
            putExtra("com.symbol.datawedge.api.SET_CONFIG", setConfigBundle)
        }

        context.sendBroadcast(intent)
    }

    fun initialize() : Boolean {
        try {
            
            setAppList()
            setPluginConfig()
            sendConfig()
            return true
            
        } catch (e: Exception) {
            
            Log.e("DWConfig", "Error initializing DataWedge", e)
            return false
            
        }
    }
}

I call initialize() method during the launch of my app:

@HiltViewModel
class MainViewModel @Inject constructor(
    private val dwConfig: DWConfig
) : ViewModel() {

    fun initializeDataWedge(): Boolean {
        return dwConfig.initialize()
    }

    ...

}
@HiltAndroidApp
class MainApplication : Application() {
    @Composable
    fun App(activity: MainActivity, mainViewModel: MainViewModel) {

        LaunchedEffect(Unit) {

            val dataWedgeJob = async { mainViewModel.initializeDataWedge() }
            
            ...

            dataWedgeJob.await()

            ...
}

I found most of the informations that I needed here (unfortunately, all the examples are written in Java) : https://techdocs.zebra.com/datawedge/13-0/guide/api/setconfig/

Almost all the parameters that you can configure in the Datawedge App are referenced here with their ids and their possible values that you can set programmatically.

Reasons:
  • Blacklisted phrase (0.5): I need
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Pierrick Valentin