Set Config

DataWedge 6.7

SET_CONFIG

Introduced in DataWedge 6.4.

Used to create, update or replace a DataWedge Profile and its settings. In DataWedge 6.6 and higher, this API also can be used to configure multiple Plug-ins with a single intent action. Beginning with DataWedge 6.7, the behavior of inter-character delay is enhanced. See the Keystroke Output guide for more information.

This API implements nested bundles, which contain multiple configuration parameters in a single data field.


To create a Profile without configuring its settings parameters, see CREATE_PROFILE.

Function Prototype

Intent i = new Intent();
i.setAction("com.symbol.datawedge.api.ACTION");
i.putExtra("com.symbol.datawedge.api.SET_CONFIG", <mainbundle>);

Parameters

ACTION [String]: "com.symbol.datawedge.api.ACTION"

EXTRA_DATA [String]: "com.symbol.datawedge.api.SET_CONFIG"

BUNDLE: <mainbundle> (see parameters below)

MAIN BUNDLE

The main SET_CONFIG bundle includes the following properties:

  • PROFILE_NAME [String]: The name of the Profile on which to perform action(s)
  • CONFIG_MODE [String]: (Default=OVERWRITE)
    • CREATE_IF_NOT_EXIST: Creates the Profile if string in PROFILE_NAME is not present on device
    • OVERWRITE: If Profile exists, resets all options to default, then configures specified settings
    • UPDATE: Updates only specified settings
  • PROFILE_ENABLED [String]: Optional; Controls whether to enable (true) or disable (false) a Profile (default=true). If not specified, no change is made to the Profile state.
  • PLUGIN_CONFIG [Bundle[ ]]: A bundle array (nested within the main bundle) that contains settings of each Plug-in
  • APP_LIST [Array]: List of applications and/or activities to associate with the Profile

PLUGIN_CONFIG BUNDLE

The PLUGIN_CONFIG bundle is configured using the following properties:

RESET_CONFIG [String]: Optional

  • True (Default) – Clear any existing configuration and create a new configuration with the specified parameter values
  • False – Update the existing values and add values not already in the configuration

PLUGIN_NAME [String]: Name of the Plug-in to configure. See tables below for PARAM_LIST values.

  • BARCODE input
  • SERIAL input
  • INTENT output
  • KEYSTROKE output
  • BDF (basic data formatting) processing

Notes:

  • Plug-in names are case sensitive.
  • For DataWedge 6.5 and below, each intent involving a Plug-in requires a separate intent Action.

PARAM_LIST [Bundle]: A parameter list bundle nested within the PLUGIN_CONFIG bundle. Includes the list of parameters to be updated under the specified Plug-in. Setting an empty string in any parameter value resets that parameter to its default setting.

A visual representation of nested SET_CONFIG bundles. See example code.

PARAM_LIST BUNDLE

The PARAM_LIST bundle is configured by specifying the parameter name and value from the table below. Applies to parameters matching the PLUGIN_NAME specified in PLUGIN_CONFIG bundle.

  • BARCODE – takes a value from the Scanner Input Parameters table below; specify decoder and other input settings as EXTRA_DATA in the PARAM_LIST nested bundle.

    • scanner_selection_by_identifier [string]- takes a value from the list of Scanner Identifiers below.
  • SERIAL - takes values as indicated below:

    • serial_port_id [string] - 0–n (must be a valid port index)
    • serial_input_enabled [string] - true/false
    • serial_baudrate [string] - 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 or 921600
    • serial_databits [string] - 7 or 8
    • serial_parity [string] - NONE, ODD, EVEN, MARK or SPACE
    • serial_stopbits [string] - 1 or 2
    • serial_flow [string] - FLOW_NONE, FLOW_RTS_CTS or FLOW_XON_XOFF
  • INTENT - takes values as indicated below:

    • intent_output_enabled [string]- true/false
    • intent_action [string] - exact name of the action
    • intent_category [string] - exact name of the category
    • intent_delivery [string]:
      • 0 - Start Activity
      • 1 - Start Service
      • 2 - Broadcast

  • KEYSTROKE - takes a value from the Keystroke Output Parameters table below; specify output settings as EXTRA_DATA in the PARAM_LIST nested bundle.

  • BDF - Applies Basic Data Formatting rules to the acquired data. Takes values:

    • bdf_enabled [string]- true/false

    • bdf_prefix [string]- prepend acquired data

    • bdf_suffix [string]- append acquired data

    • bdf_send_data [string]- true/false

    • bdf_send_hex [string]- true/false

    • bdf_send_tab [string]- true/false

    • bdf_send_enter [string]- true/false

APP_LIST

An array of bundles that contains a set of PACKAGE_NAMES and an ACTIVITY_LIST to be associated with the Profile.

APP_LIST BUNDLE

Contains the following properties:

PACKAGE_NAME [String]: ex: "com.symbol.emdk.barcodesample1" or a wildcard (*) character

ACTIVITY_LIST [List]: A list of activities for the PACKAGE_NAME. Wildcard (*) character also supported.

Scanner Identifiers

The scanner identifier (introduced in DataWedge 6.5) permits scanners to be identified by a friendly name rather than an index number.

SCANNER_IDENTIFIER [String]: in each scanner info bundle for each scanner supported in the device. Both parameters are supported in DataWedge and higher; the scanner identifier value takes precedence if an index also is referenced in the code.

Possible values:

  • AUTO - Automatic scanner selection
  • INTERNAL_IMAGER - Built-in imager scanner
  • INTERNAL_LASER - Built-in laser scanner
  • INTERNAL_CAMERA - Built-in camera scanner
  • SERIAL_SSI - Pluggable Z-back scanner for ET50/ET55
  • BLUETOOTH_SSI - RS507 Bluetooth scanner
  • BLUETOOTH_RS6000 - RS6000 Bluetooth scanner
  • BLUETOOTH_DS3678 - DS3678 Bluetooth scanner
  • PLUGABLE_SSI - Serial SSI scanner RS429 (for use with WT6000)
  • PLUGABLE_SSI_RS5000 - Serial SSI scanner RS5000 (for use with WT6000)
  • USB_SSI_DS3608 - DS3608 pluggable USB scanner

Result Codes

DataWedge returns the following error codes if the app includes the intent extras RECEIVE_RESULT and COMMAND_IDENTIFIER to enable the app to get results using the DataWedge result intent mechanism. See Example, below.

  • PLUGIN_NOT_SUPPORTED - An attempt was made to configure a plug-in that is not supported by DataWedge intent APIs
  • BUNDLE_EMPTY - The bundle contains no data
  • PROFILE_NAME_EMPTY - An attempt was made to configure a Profile name with no data
  • PROFILE_NOT_FOUND - An attempt was made to perform an operation on a Profile that does not exist
  • PLUGIN_BUNDLE_INVALID - A passed plug-in parameter bundle is empty or contains insufficient information
  • PARAMETER_INVALID - The passed parameters were empty, null or invalid
  • APP_ALREADY_ASSOCIATED - An attempt was made to associate an app that was already associated with another Profile
  • OPERATION_NOT_ALLOWED - An attempt was made to rename or delete a protected Profile or to associate an app with Profile0

Also see the Result Codes guide for more information.

Return Values

Error and debug messages are logged to the Android logging system, which can be viewed and filtered by the logcat command. Use logcat from an ADB shell to view the log messages:


$ adb logcat -s DWAPI

Error messages are logged for invalid actions and parameters


Example Code

Nested bundles

// MAIN BUNDLE PROPERTIES
    Bundle bMain = new Bundle();
    bMain.putString("PROFILE_NAME","Profile12");            // <- "Profile12" is a bundle
    bMain.putString("PROFILE_ENABLED","true");              // <- that will be enabled
    bMain.putString("CONFIG_MODE","CREATE_IF_NOT_EXIST");   // <- or created if necessary.

// PLUGIN_CONFIG BUNDLE PROPERTIES
    Bundle bConfig = new Bundle();
    bConfig.putString("PLUGIN_NAME","BARCODE");
    bConfig.putString("RESET_CONFIG","true"); 


// PARAM_LIST BUNDLE PROPERTIES
    Bundle bParams = new Bundle();
    bParams.putString("scanner_selection","auto");
    bParams.putString("scanner_input_enabled","true");
// 
// NOTE: The "scanner_selection" parameter (above) supports "auto" selection
// --OR-- the assignment of a scanner device index, which is obtained by 
// using the ENUMERATE_SCANNERS API.  
//
//      Syntax for scanner index:
//
//              Bundle bParams = new Bundle();
//      diff--> bParams.putString("current-device-id","0");
//              bParams.putString("scanner_input_enabled","true");
//
// 
// NEST THE BUNDLE "bParams" WITHIN THE BUNDLE "bConfig"
    bConfig.putBundle("PARAM_LIST", bParams);

// THEN NEST THE "bConfig" BUNDLE WITHIN THE MAIN BUNDLE "bMain"
    bMain.putBundle("PLUGIN_CONFIG", bConfig);

// CREATE APP_LIST BUNDLES (apps and/or activities to be associated with the Profile)
    Bundle bundleApp1 = new Bundle();
    bundleApp1.putString("PACKAGE_NAME","com.symbol.emdk.simulscansample1");
    bundleApp1.putStringArray("ACTIVITY_LIST", new String[]{
            "com.symbol.emdk.simulscansample1.DeviceControl",
            "com.symbol.emdk.simulscansample1.MainActivity",
            "com.symbol.emdk.simulscansample1.ResultsActivity.*",
            "com.symbol.emdk.simulscansample1.ResultsActivity2",
            "com.symbol.emdk.simulscansample1.SettingsFragment1"});

    Bundle bundleApp2 = new Bundle();
    bundleApp2.putString("PACKAGE_NAME","com.example.intents.datawedgeintent");
    bundleApp2.putStringArray("ACTIVITY_LIST", new String[]{
            "com.example.intents.datawedgeintent.DeviceControl",
            "com.example.intents.datawedgeintent.MainActivity",
            "com.example.intents.datawedgeintent.ResultsActivity",
            "com.example.intents.datawedgeintent.SettingsFragment1"});

    Bundle bundleApp3 = new Bundle();
    bundleApp3.putString("PACKAGE_NAME","*");
    bundleApp3.putStringArray("ACTIVITY_LIST", new String[]{"*"});

    Bundle bundleApp4 = new Bundle();
    bundleApp4.putString("PACKAGE_NAME","com.symbol.myzebraapp");
    bundleApp4.putStringArray("ACTIVITY_LIST", new String[]{"*"});

// NEXT APP_LIST BUNDLE(S) INTO THE MAIN BUNDLE
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            bundleApp1
            ,bundleApp2
            ,bundleApp3
            ,bundleApp4
    });

    Intent i = new Intent();
    i.setAction("com.symbol.datawedge.api.ACTION");
    i.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);

    this.sendBroadcast(i);

Set Serial Input Configuration

//
// Port 1 Configuration [Start]
//
Bundle bPort1 = new Bundle();
bPort1.putString("serial_port_id", "0"); //Supported Values: 0,1
bPort1.putString("serial_input_enabled", "true"); // Supported Values: true, false
bPort1.putString("serial_baudrate", "1200"); // Supported Values (some): 300, 1200, 2400, 4800, 19200, and more
bPort1.putString("serial_databits", "8"); //Supported Values: 8, 7
bPort1.putString("serial_parity", "ODD"); //Supported Values: NONE, ODD, EVEN, MARK, SPACE
bPort1.putString("serial_stopbits", "1"); //Supported Values: 1, 2
bPort1.putString("serial_flow", "FLOW_RTS_CTS"); //Supported Values: FLOW_NONE, FLOW_RTS_CTS, FLOW_DSR_DTR, FLOW_XON_XOFF
//
// Port 1 Configuration [End]
//
// Port 2 Configuration [Start]
//
Bundle bPort2 = new Bundle();
bPort2.putString("serial_port_id", "1");
bPort2.putString("serial_input_enabled", "true");
bPort2.putString("serial_baudrate", "300");
bPort2.putString("serial_databits", "7");
//bPort2.putString("abc", "123");
bPort2.putString("serial_stopbits", "2");
bPort2.putString("serial_flow", "FLOW_DSR_DTR");
bPort2.putString("serial_parity", "EVEN");
//
// Port 2 Configuration [End]
//
Bundle bConfig = new Bundle();
bConfig.putString("RESET_CONFIG", "false");
bConfig.putString("PLUGIN_NAME", "SERIAL");
bConfig.putParcelableArray("DEVICE_LIST", new Bundle[]{
        bPort1, bPort2
});

Bundle bMain = new Bundle();
bMain.putString("PROFILE_NAME", "Profile0 (default)");
bMain.putString("CONFIG_MODE", "UPDATE");
bMain.putBundle("PLUGIN_CONFIG", bConfig);

Intent i = new Intent();
i.setAction("com.symbol.datawedge.api.ACTION");
i.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
i.putExtra("SEND_RESULT", "true");
i.putExtra("com.symbol.datawedge.api.RESULT_CATEGORY", DEFAULT_CATEGORY);
i.putExtra("COMMAND_IDENTIFIER", "DW_SERIAL_COMMAND");

this.sendBroadcast(i);

Set KEYSTROKE Output

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    registerReceivers();
}

@Override
protected void onResume() {
    super.onResume();
    setKeystrokeOutputPluginConfiguration();
}

private void registerReceivers() {
    IntentFilter filter = new IntentFilter();
    filter.addAction("com.symbol.datawedge.api.RESULT_ACTION");
    filter.addCategory("android.intent.category.DEFAULT");
    registerReceiver(datawedgeKeystrokeNIntentStatusBR, filter);
}

private BroadcastReceiver datawedgeKeystrokeNIntentStatusBR = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String command = intent.getStringExtra("COMMAND").equals("") ? "EMPTY" : intent.getStringExtra("COMMAND");
        String commandIdentifier = intent.getStringExtra("COMMAND_IDENTIFIER").equals("") ? "EMPTY" : intent.getStringExtra("COMMAND_IDENTIFIER");
        String result = intent.getStringExtra("RESULT").equals("") ? "EMPTY" : intent.getStringExtra("RESULT");

        Bundle bundle;
        String resultInfo = "";
        if (intent.hasExtra("RESULT_INFO")) {
            bundle = intent.getBundleExtra("RESULT_INFO");
            Set<String> keys = bundle.keySet();
            for (String key : keys) {
                resultInfo += key + ": " + bundle.getString(key) + "\n";
            }
        }

         String text="\n"+"Command:      " + command + "\n" +
                          "Result:       " + result + "\n" +
                          "Result Info:  " + resultInfo + "\n" +
                          "CID:          " + commandIdentifier;

        Log.d("TAG”,text);
    }
};

public void setKeystrokeOutputPluginConfiguration() {

    Bundle configBundle = new Bundle();
    configBundle.putString("PROFILE_NAME","UserProfile");
    configBundle.putString("PROFILE_ENABLED","true");
    configBundle.putString("CONFIG_MODE","CREATE_IF_NOT_EXIST");

    Bundle bConfig = new Bundle();

    bConfig.putString("PLUGIN_NAME", "KEYSTROKE");
    Bundle bParams = new Bundle();
    bParams.putString("keystroke_output_enabled","true");
    bParams.putString("keystroke_action_char","9"); // 0, 9 , 10, 13
    bParams.putString("keystroke_delay_extended_ascii","500");
    bParams.putString("keystroke_delay_control_chars","800");
    bConfig.putBundle("PARAM_LIST", bParams);

    configBundle.putBundle("PLUGIN_CONFIG", bConfig);

    Intent i = new Intent();
    i.setAction("com.symbol.datawedge.api.ACTION");
    i.putExtra("com.symbol.datawedge.api.SET_CONFIG", configBundle);
    i.putExtra("SEND_RESULT", "true");
    i.putExtra("COMMAND_IDENTIFIER", "KEYSTROKE_API");
    this.sendBroadcast(i);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(datawedgeKeystrokeNIntentStatusBR);
}

Set INTENT Output

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    registerReceivers();
}

@Override
protected void onResume() {
    super.onResume();
    setIntentOutputPluginConfiguration();
}

private void registerReceivers() {
    IntentFilter filter = new IntentFilter();
    filter.addAction("com.symbol.datawedge.api.RESULT_ACTION");
    filter.addCategory("android.intent.category.DEFAULT");
    registerReceiver(datawedgeKeystrokeNIntentStatusBR, filter);
}

private BroadcastReceiver datawedgeKeystrokeNIntentStatusBR = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String command = intent.getStringExtra("COMMAND").equals("") ? "EMPTY" : intent.getStringExtra("COMMAND");
        String commandIdentifier = intent.getStringExtra("COMMAND_IDENTIFIER").equals("") ? "EMPTY" : intent.getStringExtra("COMMAND_IDENTIFIER");
        String result = intent.getStringExtra("RESULT").equals("") ? "EMPTY" : intent.getStringExtra("RESULT");

        Bundle bundle;
        String resultInfo = "";
        if (intent.hasExtra("RESULT_INFO")) {
            bundle = intent.getBundleExtra("RESULT_INFO");
            Set<String> keys = bundle.keySet();
            for (String key : keys) {
                resultInfo += key + ": " + bundle.getString(key) + "\n";
            }
        }
        String text ="\n" + "Command:      " + command + "\n" +
                            "Result:       " + result + "\n" +
                            "Result Info:  " + resultInfo + "\n" +
                            "CID:          " + commandIdentifier;
        Log.d("TAG”,text);
    }
};

public void setIntentOutputPluginConfiguration() {

    Bundle bMain = new Bundle();
    Bundle bConfig = new Bundle();
    Bundle bParams = new Bundle();

    bParams.putString("intent_output_enabled","true");
    bParams.putString("intent_action","com.symbol.dwudiusertokens.udi");
    bParams.putString("intent_category","zebra.intent.dwudiusertokens.UDI");
    bParams.putInt("intent_delivery",2); //Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast

    bConfig.putString("PLUGIN_NAME", "INTENT");
    bConfig.putString("RESET_CONFIG","false");
    bConfig.putBundle("PARAM_LIST", bParams);

    bMain.putBundle("PLUGIN_CONFIG", bConfig);
    bMain.putString("PROFILE_NAME","UserProfile");
    bMain.putString("PROFILE_ENABLED","true");
    bMain.putString("CONFIG_MODE","CREATE_IF_NOT_EXIST");

    Intent i = new Intent();
    i.setAction("com.symbol.datawedge.api.ACTION");
    i.putExtra("com.symbol.datawedge.api.SET_CONFIG",bMain);
    i.putExtra("SEND_RESULT", "true");
    i.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
    this.sendBroadcast(i);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(datawedgeKeystrokeNIntentStatusBR);
}

Set BDF processing

Process Plug-ins manipulate the acquired data in a specified way before sending it to the associated app via the Output Plug-in. About BDF. About ADF.

// Main bundle properties
    Bundle bMain = new Bundle();
    bMain.putString("PROFILE_NAME","Profile12");
    bMain.putString("PROFILE_ENABLED","true");
    bMain.putString("CONFIG_MODE","CREATE_IF_NOT_EXIST");

// plugin_config bundle properties
    Bundle bConfig = new Bundle();
    bConfig.putString("PLUGIN_NAME","BDF");
    bConfig.putString("RESET_CONFIG","true");
    bConfig.putString("OUTPUT_PLUGIN_NAME","KEYSTROKE");

// param_list bundle properties
    Bundle bParams = new Bundle();
    bParams.putString("bdf_enabled","true");
    bParams.putString("bdf_prefix","AAA");
    bParams.putString("bdf_send_enter","true");

    bConfig.putBundle("PARAM_LIST", bParams);

    bMain.putBundle("PLUGIN_CONFIG", bConfig);

    Intent i = new Intent();
    i.setAction("com.symbol.datawedge.api.ACTION");
    i.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    this.sendBroadcast(i);

Set/Get Result Codes

Command and configuration intent parameters determine whether to send result codes (disabled by default). When using SEND_RESULT, the COMMAND_IDENTIFIER is used to match the result code with the originating intent. Sample usage of these parameters is shown below.

Note: Modify this generic code to match the API being used.

// send the intent
    Intent i = new Intent();
    i.setAction(ACTION);
    i.putExtra("com.symbol.datawedge.api.CREATE_PROFILE", "Profile1");

// request and identify the result code
    i.putExtra("SEND_RESULT","true");
    i.putExtra("COMMAND_IDENTIFIER","123456789");
    this.sendBroadcast(i);

// register to receive the result
    public void onReceive(Context context, Intent intent){

        String command = intent.getStringExtra("COMMAND");
        String commandidentifier = intent.getStringExtra("COMMAND_IDENTIFIER");
        String result = intent.getStringExtra("RESULT");

        Bundle bundle = new Bundle();
        String resultInfo = "";
        if(intent.hasExtra("RESULT_INFO")){
            bundle = intent.getBundleExtra("RESULT_INFO");
            Set<String> keys = bundle.keySet();
            for (String key: keys) {
                resultInfo += key + ": "+bundle.getString(key) + "\n";
            }
        }

        String text = "Command: "+command+"\n" +
                      "Result: " +result+"\n" +
                      "Result Info: " +resultInfo + "\n" +
                      "CID:"+commandidentifier;

        Toast.makeText(context, text, Toast.LENGTH_LONG).show();

    };

Use the internal imager for scanning

Bundle bConfig = new Bundle();

bConfig.putString("PLUGIN_NAME","BARCODE");

Bundle bParams = new Bundle();
bParams.putString("scanner_input_enabled", "true");
//
// auto or valid scanner identifier:
//
bParams.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER");
bConfig.putBundle("PARAM_LIST",bParams);

Configure an inter-character delay

private Integer ctrlCharacterDelayValue;
private Integer genericCharacterDelayValue;
private Boolean flagExtendedASCIIOnly;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    registerReceivers();
    ctrlCharacterDelayValue = null;
    genericCharacterDelayValue = null;
    flagExtendedASCIIOnly = null;
}

private void registerReceivers() {
    IntentFilter filter = new IntentFilter();
    filter.addAction("com.symbol.datawedge.api.RESULT_ACTION");
    filter.addCategory(Intent.CATEGORY_DEFAULT);
    registerReceiver(broadcastReceiver, filter);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcastReceiver);
}

//Set configuration
public void setKeystrokeOutputPluginConfiguration(View v) {

    Bundle configBundle = new Bundle();
    configBundle.putString("PROFILE_NAME","Profile0 (default)");
    configBundle.putString("PROFILE_ENABLED","true");
    configBundle.putString("CONFIG_MODE","UPDATE");

    Bundle bConfig = new Bundle();

    bConfig.putString("PLUGIN_NAME", "KEYSTROKE");
    Bundle bParams = new Bundle();
    bParams.putString("keystroke_output_enabled","true");
    if(ctrlCharacterDelayValue!=null){
        bParams.putString("keystroke_delay_control_chars",ctrlCharacterDelayValue+"");
    }
    if(genericCharacterDelayValue !=null){
        bParams.putString("keystroke_character_delay", genericCharacterDelayValue +"");
    }
    if(flagExtendedASCIIOnly!=null){
        bParams.putString("keystroke_delay_multibyte_chars_only", flagExtendedASCIIOnly +"");
    }

    bConfig.putBundle("PARAM_LIST", bParams);
    configBundle.putBundle("PLUGIN_CONFIG", bConfig);

    Intent i = new Intent();
    i.setAction("com.symbol.datawedge.api.ACTION");
    i.putExtra("com.symbol.datawedge.api.SET_CONFIG", configBundle);
    i.putExtra("SEND_RESULT", "true");
    i.putExtra("COMMAND_IDENTIFIER", "KEYSTROKE_API");
    this.sendBroadcast(i);
    }

//broadcast receiver
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.d(TAG, "#DataWedge-APP# Action: " + action);


    //result of set config
        if(action.equals("com.symbol.datawedge.api.RESULT_ACTION")){
            Bundle extrasBundle = intent.getExtras();
            Set<String> keys = extrasBundle.keySet();
            if(keys!=null&&keys.contains("RESULT")){
                String result = (String)extrasBundle.get("RESULT");
                Log.d(TAG,"Result:"+result);
                //get additional info
                Bundle resultInforBundle = (Bundle) extrasBundle.get("RESULT_INFO");
                Object resultCode = resultInforBundle.get("RESULT_CODE");
                if(resultCode instanceof String){
                    String code = (String)resultCode;
                    Log.d(TAG,"Code:"+code);
                }else if(resultCode instanceof String[]){
                    String[] codesArray = (String[])resultCode;
                    if(codesArray!=null){
                        for(String code : codesArray){
                            Log.d(TAG,"Code:"+code);
                        }
                    }
                }
            }

        }//end result of set config
    }//end onReceive
};

Scanner Input Parameters

Important: Support for decode parameters can vary depending on the selected scanning device. For device-specific support notes, please refer to the Integrator Guide that accompanied the unit.

All parameters are case sensitive.

Param name

Param values

scanning_mode

1 - Single

2 - UDI

3 - MultiBarcode

multi_barcode_count

integer from 2–10

scanner_selection_by_identifier

See Scanner Identifiers table

trigger-wakeup

false

true

scanner_input_enabled

false

true

trigger-wakeup

false

true

scanner_selection

auto

0–n (valid scanner index from ENUMERATE_SCANNERS API)

decoder_upca

false

true

decoder_upce0

false

true

decoder_ean13

false

true

decoder_ean8

false

true

decoder_code128

false

true

decoder_code39

false

true

decoder_i2of5

false

true

decoder_gs1_databar

false

true

decoder_gs1_databar_lim

false

true

decoder_gs1_databar_exp

false

true

decoder_datamatrix

false

true

decoder_qrcode

false

true

decoder_pdf417

false

true

decoder_composite_ab

false

true

decoder_composite_c

false

true

decoder_microqr

false

true

decoder_aztec

false

true

decoder_maxicode

false

true

decoder_micropdf

false

true

decoder_uspostnet

false

true

decoder_usplanet

false

true

decoder_uk_postal

false

true

decoder_japanese_postal

false

true

decoder_australian_postal

false

true

decoder_canadian_postal

false

true

decoder_dutch_postal

false

true

decoder_us4state

false

true

decoder_us4state_fics

false

true

decoder_codabar

false

true

decoder_msi

false

true

decoder_code93

false

true

decoder_trioptic39

false

true

decoder_d2of5

false

true

decoder_chinese_2of5

false

true

decoder_korean_3of5

false

true

decoder_code11

false

true

decoder_tlc39

false

true

decoder_mailmark

false

true

decoder_hanxin

false

true

decoder_signature

false

true

decoder_webcode

false

true

decoder_matrix_2of5

false

true

decoder_upce1

false

true

decoder_upca_report_check_digit

false

true

decoder_upca_preamble

0 - Preamble None

1 - Preamble Sys Char

2 - Preamble Country and Sys Char

decoder_upce0_report_check_digit

false

true

decoder_upce0_preamble

0 - Preamble None

1 - Preamble Sys Char

2 - Preamble Country and Sys Char

decoder_upce0_convert_to_upca

false

true

decoder_ean8_convert_to_ean13

false

true

decoder_code128_length1

Integer from 0–55

decoder_code128_length2

Integer from 0–55

decoder_code128_redundancy

false

true

decoder_code128_enable_plain

false

true

decoder_code128_enable_ean128

false

true

decoder_code128_enable_isbt128

false

true

decoder_code128_isbt128_concat_mode

0 - Concat Mode Never

1 - Concat Mode Always

2 - Concat Mode Auto

decoder_code128_check_isbt_table

false

true

decoder_code128_security_level

0 - Security Level 0

1 - Security Level 1

2 - Security Level 2

3 - Security Level 3

code128_enable_marginless_decode

false

true

code128_ignore_fnc4

false

true

decoder_code39_length1

Integer from 0–55

decoder_code39_length2

Integer from 0–55

decoder_code39_verify_check_digit

false

true

decoder_code39_report_check_digit

false

true

decoder_code39_full_ascii

false

true

decoder_code39_redundancy

false

true

decoder_code39_convert_to_code32

false

true

decoder_code39_report_code32_prefix

false

true

decoder_code39_security_level

0 - Security Level 0

1 - Security Level 1

2 - Security Level 2

3 - Security Level 3

code39_enable_marginless_decode

false

true

decoder_i2of5_length1

Integer from 0–55

decoder_i2of5_length2

Integer from 0–55

decoder_i2of5_redundancy

false

true

decoder_i2of5_check_digit

0 - No Check Digit

1 - USS Check Digit

2 - OPCC Check Digit

decoder_i2of5_report_check_digit

false

true

decoder_itf14_convert_to_ean13

false

true

decoder_i2of5_security_level

0 - Security Level 0

1 - Security Level 1

2 - Security Level 2

3 - Security Level 3

i20f5_enable_marginless_decode

false

true

decoder_gs1_lim_security_level

1 - Security Level 1

2 - Security Level 2

3 - Security Level 3

4 - Security Level 4

decoder_composite_ab_ucc_link_mode

0 - Link Flag Ignored

1 - Always Linked

2 - Auto Discriminate

decoder_uk_postal_report_check_digit

false

true

decoder_codabar_length1

Integer from 0–55

decoder_codabar_length2

Integer from 0–55

decoder_codabar_redundancy

false

true

decoder_codabar_clsi_editing

false

true

decoder_codabar_notis_editing

false

true

decoder_msi_length1

Integer from 0–55

decoder_msi_length2

Integer from 0–55

decoder_msi_redundancy

false

true

decoder_msi_check_digit

0 - One Check Digit

1 - Two Check Digit

decoder_msi_check_digit_scheme

0 - Mod-11-10

1 - Mod-10-10

decoder_msi_report_check_digit

false

true

decoder_code93_length1

Integer from 0–55

decoder_code93_length2

Integer from 0–55

decoder_code93_redundancy

false

true

decoder_trioptic39_redundancy

false

true

decoder_d2of5_length1

Integer from 0–55

decoder_d2of5_length2

Integer from 0–55

decoder_d2of5_redundancy

false

true

decoder_code11_length1

Integer from 0–55

decoder_code11_length2

Integer from 0–55

decoder_code11_redundancy

false

true

decoder_code11_verify_check_digit

0 - No Check Digit

1 - 1 Check Digit

2 - 2 Check Digits

decoder_code11_report_check_digit

false

true

decoder_hanxin_inverse

0 - Disable

1 - Enable

2 - Auto

decoder_matrix_2of5_length1

Integer from 0–55

decoder_matrix_2of5_length2

Integer from 0–55

decoder_matrix_2of5_redundancy

false

true

decoder_matrix_2of5_report_check_digit

false

true

decoder_matrix_2of5_verify_check_digit

false

true

decoder_upce1_report_check_digit

false

true

decoder_upce1_preamble

0 - Preamble None

1 - Preamble Sys Char

2 - Preamble Country and Sys Char

decoder_upce1_convert_to_upca

false

true

upcean_security_level

0 - Level 0

1 - Level 1

2 - Level 2

3 - Level 3

upcean_supplemental2

false

true

upcean_supplemental5

false

true

upcean_supplemental_mode

0 - No Supplementals

1 - Supplemental Always

2 - Supplemental Auto

3 - Supplemental Smart

4 - Supplemental 378-379

5 - Supplemental 978-979

6 - Supplemental 414-419-434-439

7 - Supplemental 977

upcean_retry_count

Integer from 2 to 20

upcean_random_weight_check_digit

false

true

upcean_linear_decode

false

true

upcean_bookland

false

true

upcean_coupon

false

true

upcean_coupon_report

0 - Old Coupon Report Mode

1 - New Coupon Report Mode

2 - Both Coupon Report Modes

upcean_ean_zero_extend

false

true

upcean_bookland_format

0 - Format ISBN-10

1 - Format ISBN-13

databar_to_upc_ean

false

true

upc_enable_marginless_decode

false

true

aim_mode

on - On

off - Off

beam_timer

Integer from 0–60000

Adaptive_Scanning

1 - Disable

0 - Enable

Beam_Width

0 - Narrow

1 - Normal

2 - Wide

power_mode

0 - Low Power Mode

1 - Optimized Power Mode

2 - High Power Mode

3 - Always On

mpd_mode

0 - Disable Mobile Phone Display Mode

3 - Enable Mobile Phone Display Mode

reader_mode

7 - Presentation Mode

0 - Triggered Mode

linear_security_level

1 - Security Short Or Codabar

2 - Security All Twice

3 - Security Long And Short

4 - Security All Thrice

picklist

0 - Disabled

1 – Enabled/HW picklist

2 – Software Picklist

aim_type

0 - Trigger

1 - Timed Hold

2 - Timed Release

3 - Press And Release

5 - Continuous Read

6 - Press and Sustain

aim_timer

Integer from 0–60000

same_barcode_timeout

Integer from 0–5000

different_barcode_timeout

Integer from 0–5000

illumination_mode

off - Off

torch - On

lcd_mode

0 - Disabled

3 - Enabled

low_power_timeout

Integer from 0–1000

delay_to_low_power_mode

16 - 1 Second

29 - 30 Seconds

32 - 1 Minute

37 - 5 Minutes

illumination_brightness

Integer from 0–10

inverse_1d_mode

0 - Disable

1 - Enable

2 - Auto

viewfinder_size

Integer from 0–100

viewfinder_posx

Integer from 0–100

viewfinder_posy

Integer from 0–100

1d_marginless_decode_effort_level

0 - Level 0

1 - Level 1

2 - Level 2

3 - Level 3

poor_quality_bcdecode_effort_level

0 - Level 0

1 - Level 1

2 - Level 2

3 - Level 3

charset_name

ISO-8859-1 - ISO-8859-1

Shift_JIS - Shift_JIS

UTF-8 - UTF-8

viewfinder_mode

1 - Viewfinder Enabled

2 - Static Reticle

code_id_type

0 - Code Id Type None

1 - Code Id Type Aim

2 - Code Id Type Symbol

volume_slider_type

0 - Ringer

1 - Music and Media

2 - Alarms

3 - Notification

decode_audio_feedback_uri

URI – Can be a query of the available URIs from RingToneManager

decode_haptic_feedback

false

true

bt_disconnect_on_exit

false

true

connection_idle_time

Integer from 0–1800

establish_connection_time

Integer from 30–60

remote_scanner_audio_feedback_mode

Integer from 0–3

remote_scanner_led_feedback_mode

Integer from 0–3

display_bt_address_barcode

false

true

good_decode_led_timer

Integer from 0–1000

decoding_led_feedback

false

true

decoder_usplanet_report_check_digit

false

true

Important: Support for decode parameters can vary depending on the scanning device selected. For device-specific support notes, please refer to the Integrator Guide that accompanied the unit.


Serial Input Parameters

Important: Support for serial parameters varies by device. For device-specific support notes, please refer to the Integrator Guide that accompanied the unit.

All parameters are case sensitive.

Param name

Param values

serial_port_id

0–n (must be a valid index)

serial_input_enabled

false

true

serial_baudrate

300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 or 921600

serial_databits

7 or 8

serial_parity

NONE, ODD, EVEN, MARK or SPACE

serial_stopbits

1 or 2

serial_flow

FLOW_NONE, FLOW_RTS_CTS or FLOW_XON_XOFF


Keystroke Output Parameters

All parameters are case sensitive.

Param name

Param values

keystroke_output_enabled

false

true

keystroke_action_character

NONE - ASCII_NO_VALUE

TAB - ASCII_TAB_VALUE

LF - ASCII_LF_VALUE

CR - ASCII_CR_VALUE

keystroke_delay_extended_ascii
(deprecated)

Integer from 0–1000

keystroke_delay_control_characters

Integer from 0–1000

keystroke_character_delay

Integer from 0–1000

keystroke_delay_multibyte_chars_only

false

true

Keystroke Delay Notes

  • The keystroke_delay_extended_ascii parameter is deprecated.
  • If a Keystroke Plug-in bundle uses the keystroke_delay_extended_ascii parameter, DataWedge sets the keystroke_delay_multibyte_chars_only parameter to true.
  • If both the keystroke_delay_extended_ascii and keystroke_character_delay parameters are sent:
    • The keystroke_character_delay value is retained.
    • The keystroke_delay_extended_ascii value is ignored.
    • If available, the keystroke_delay_multibyte_chars_only value is saved; it is otherwise considered false.

SEE ALSO:

Zebra Support Central | Integrator Guides, Product Manuals, Software Downloads and Support

LaunchPad | Zebra Developer Community

Intent | Android Developers

Intents and Intent Filters | Android Developers

Android Intents | Tutorial