Set Config

DataWedge 6.8

SET_CONFIG

Used to create, update or replace a DataWedge Profile and its settings, and can configure multiple Plug-ins with a single intent action.

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


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

Version History

  • DataWedge 6.4 - API introduced
  • DataWedge 6.6 - Added support for configuring multiple Plug-ins with a single Action
  • DataWedge 6.7 - Enhanced inter-character delay feature (More info)
  • DataWedge 6.8 - Support for ADF settings:
    • New ADF_RULE bundle with Action, Device, Decoder and Label_ID sub-bundles
    • New result code: RESULT_ACTION_RESULT_CODE_EMPTY_RULE_NAME

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. When used, takes the following values:
    • 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:

  • BARCODE input
  • SERIAL input
  • INTENT output
  • KEYSTROKE output
  • BDF (basic data formatting) processing
  • ADF (advanced 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.
  • See tables below for PARAM_LIST values.

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

  • ADF - Applies Advanced Data Formatting rules to the acquired data. This bundle contains Action, Device, Decoder and Label_ID sub-bundles, and takes values:

    • adf_enabled [string] – true/false (default=false)

    • ADF_RULE [bundle] - Takes values:

    • name [string] – Name of the ADF rule to use

    • enabled [string] – Rule enabled; true/false (default=true)

    • alldevices [string] – Accept data from all supported input sources; true/false (default=true)

    • string [string] – String to check for (default=empty string)

    • string_pos [string] – String position (default=0)

    • string_len [string] - String length (default=0)

    • ACTIONS [bundle] - Accepts multiple instances. Takes value(s):

      • type [string] - Name of Action from ADF Actions table
      • action_param_1, action_param_2... (as determined by ADF Action; see table)
    • DEVICES [bundle] - Accepts multiple instances. Takes values:

      • device_id [string] - Name of the input source: BARCODE, MSR, SIMULSCAN or SERIAL
      • enabled [string] - Accept data from specified device ID: true/false (default=true)
      • alldecoders [string] - Allow all barcode symbologies: true/false (default=true)
      • all_label_ids [string] - Allow all UDI label IDs: true/false (default=true)
    • DECODERS [bundle] - Accepts multiple instances. Takes values:

      • device_id [string] - BARCODE, MSR, SERIAL or SIMULSCAN
      • decoder [string] - (i.e. "Australian Postal")
      • enabled [string] - true/false (default=true)
    • LABEL_IDS [bundle] - Accepts multiple instances. Takes values:

      • device_id [string] - BARCODE, MSR, SERIAL or SIMULSCAN

    • label_id [string] - UDI_GS1, UDI_HIBCC or UDI_ICCBBA
    • enabled [string] - true/false (default=true)

IMPORTANT:

  • If a Profile is created without at least one Rule, DataWedge creates a "Rule0" with a single action to "SEND_REMAINING" data without modification.
  • If values in one or more newly created Rules are missing or invalid, DataWedge uses default values.
  • To update one or more Actions in an existing Profile using an intent, all Actions in the Profile must be included in the intent.

ADF ACTIONS

Category Action Type
Parameter(s) (if any)
Description

Cursor Movement

SKIP_AHEAD
action _param_1

Moves the cursor forward by the specified number of characters (default=1)

SKIP_BACK
action _param_1

Moves the cursor back by the specified number of characters (default=1)

SKIP_TO_START

Moves the cursor to the beginning of the data

MOVE_AHEAD_TO
action_param_1

Known as "Move to" in the DataWedge UI, advances the cursor until the specified string is found

MOVE_PAST_A
action_param_1

Moves the cursor forward past the specified string

Data Modification

CRUNCH_SPACES

Reduces spaces between words to one, and removes all spaces at the beginning and end of the data

STOP_CRUNCH_SPACE

Disables the last Crunch spaces action

REMOVE_SPACES

Known as "Remove all spaces" in the DataWedge UI, removes all spaces in the data

STOP_REMOVE_SPACES

Disables the last REMOVE_SPACES action

TRIM_LEFT_ZEROS

Known as "Remove leading zeros" in the DataWedge UI, removes all zeros at the beginning of the data

STOP_TRIM_LEFT_ZEROS

Disables the previous TRIM_LEFT_ZEROS action

PAD_LEFT_ZEROS
action_param_1

Known as "Pad with zeros" in the DataWedge UI, left-pads the data with the specified number of zeros (default=0)

STOP_PAD_LEFT_ZEROS

Disables the previous PAD_LEFT_ZEROS action

PAD_LEFT_SPACES
action_param_1

Known as "Pad with spaces" in the DataWedge UI, left-pads the data with the specified number of spaces (default=0)

STOP_PAD_LEFT_SPACES

Disables the previous PAD_LEFT_SPACES action

REPLACE_STRING
action_param_1
action_param_2

Replaces a specified string (action_param_1) with a new specified string (action_param_2). Both must be specified (default=empty)

STOP_REPLACE_ALL

Known as "Stop all replace string" in the DataWedge UI, stops all REPLACE_STRING actions

REMOVE_CHARACTERS
action_param_1
action_param_2
action_param_3

Removes the number of characters specified in given positions when send actions are executed
action_param_1: (0=front (default); 1=in between; 2=end; 3=center)
action_param_2: start position (default=0)
action_param_3: number of characters (default=0)

STOP_REMOVE_CHARS

Stops removing characters from subsequent send actions

Data Sending

SEND_NEXT
action_param_1

Sends the specified number of characters from the current cursor position (default=0)

SEND_REMAINING

Sends all data that remains from the current cursor position

SEND_UP_TO
action_param_1

Sends all data up to the specified string

DELAY

Known as "Send pause" in the DataWedge UI, pauses the specified number of milliseconds (default = 0; max. = 120000) before executing the next action. Zebra recommends pausing 50 ms after sending any ENTER, LINE FEED or TAB character.

SEND_STRING
action_param_1

Sends the specified string

SEND_CHAR
action_param_1

Sends the specified ASCII/ Unicode character. The maximum Unicode character value is U-10FFFF (1114111 in decimal)

Notes:

  • Default action_param values are 0, empty or none unless otherwise noted.
  • To help minimize data loss, Zebra recommends sending a DELAY of 50 ms after sending any ENTER, LINE FEED or TAB character.

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]: Present in each scanner info bundle for each scanner supported in the device. Index and identifier parameters are both 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
  • RESULT_ACTION_RESULT_CODE_EMPTY_RULE_NAME - Rule name empty or undefined in ADF_RULE bundle

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 ADF processing

//MAIN BUNDLE PROPERTIES
Bundle bMain = new Bundle();
bMain.putString("PROFILE_NAME","ProfileTest");
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","ADF");
bConfig.putString("RESET_CONFIG","true");
bConfig.putString("OUTPUT_PLUGIN_NAME","KEYSTROKE");
bConfig.putString("adf_enabled","true");

//PARAM_LIST BUNDLE PROPERTIES
//RULE BUNDLE PROPERTIES
Bundle bParamsRule1 = new Bundle();
bParamsRule1.putString("name","Rule1");
bParamsRule1.putString("enabled","true");
bParamsRule1.putString("alldevices","true");
bParamsRule1.putString("string","abc");
bParamsRule1.putString("string_pos","2");
bParamsRule1.putString("string_len","4");

//ACTION BUNDLE PROPERTIES
Bundle bParamsAction1 = new Bundle();
bParamsAction1.putString("type","SEND_NEXT");
bParamsAction1.putString("action_param_1","5");


//ACTION BUNDLE PROPERTIES
Bundle bParamsAction2 = new Bundle();
bParamsAction2.putString("type","SKIP_BACK");

//DEVICE BUNDLE PROPERTIES
Bundle bParamsDevice1 = new Bundle();
bParamsDevice1.putString("device_id","BARCODE");
bParamsDevice1.putString("enabled","true");
bParamsDevice1.putString("alldecoders","false");
bParamsDevice1.putString("all_label_ids","false");

//DEVICE BUNDLE PROPERTIES
Bundle bParamsDevice2 = new Bundle();
bParamsDevice2.putString("device_id","MSR");
bParamsDevice2.putString("enabled","true");

//DEVICE BUNDLE PROPERTIES
Bundle bParamsDevice3 = new Bundle();
bParamsDevice3.putString("device_id","SIMULSCAN");
bParamsDevice3.putString("enabled","true");

//DECODER BUNDLE PROPERTIES
Bundle bParamsDecoders1 = new Bundle();
bParamsDecoders1.putString("device_id","BARCODE");
bParamsDecoders1.putString("decoder","Australian Postal");
bParamsDecoders1.putString("enabled","true");

//DECODER BUNDLE PROPERTIES
Bundle bParamsDecoders2 = new Bundle();
bParamsDecoders2.putString("device_id","BARCODE");
bParamsDecoders2.putString("decoder","Bookland");
bParamsDecoders2.putString("enabled","false");

//DECODER BUNDLE PROPERTIES
Bundle bParamsDecoders3 = new Bundle();
bParamsDecoders3.putString("device_id","BARCODE");
bParamsDecoders3.putString("decoder","Codebar");
bParamsDecoders3.putString("enabled","true");

//LABEL ID BUNDLE PROPERTIES
Bundle bParamsLabelID1 = new Bundle();
bParamsLabelID1.putString("device_id","BARCODE");
bParamsLabelID1.putString("label_id","UDI_GS1");
bParamsLabelID1.putString("enabled","true");

//LABEL ID BUNDLE PROPERTIES
Bundle bParamsLabelID2 = new Bundle();
bParamsLabelID2.putString("device_id","BARCODE");
bParamsLabelID2.putString("label_id","UDI_HIBCC");
bParamsLabelID2.putString("enabled","true");

ArrayList<Bundle> bParamsActionList = new ArrayList<Bundle>();
bParamsActionList.add(bParamsAction1);
bParamsActionList.add(bParamsAction2);

ArrayList<Bundle> bParamsDeviceList = new ArrayList<Bundle>();
bParamsDeviceList.add(bParamsDevice1);
bParamsDeviceList.add(bParamsDevice2);
bParamsDeviceList.add(bParamsDevice3);

ArrayList<Bundle> bParamsDecoderList = new ArrayList<Bundle>();
bParamsDecoderList.add(bParamsDecoders1);
bParamsDecoderList.add(bParamsDecoders2);
bParamsDecoderList.add(bParamsDecoders3);

ArrayList<Bundle> bParamsLabelIDList = new ArrayList<Bundle>();
bParamsLabelIDList.add(bParamsLabelID1);
bParamsLabelIDList.add(bParamsLabelID2);

bParamsRule1.putParcelableArrayList("ACTIONS",bParamsActionList);
bParamsRule1.putParcelableArrayList("DEVICES",bParamsDeviceList);
bParamsRule1.putParcelableArrayList("DECODERS",bParamsDecoderList);
bParamsRule1.putParcelableArrayList("LABEL_IDS",bParamsLabelIDList);

Bundle bParamsRule2 = new Bundle();
bParamsRule2.putString("name","Rule30");
bParamsRule2.putString("enabled","true");
bParamsRule2.putString("alldevices","true");
bParamsRule2.putString("string","cde");
bParamsRule2.putString("string_pos","3");
bParamsRule2.putString("string_len","5");

ArrayList<Bundle> bParamsList = new ArrayList<Bundle>();
bParamsList.add(bParamsRule1);
bParamsList.add(bParamsRule2);

bConfig.putParcelableArrayList("PARAM_LIST", bParamsList);

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("COMMAND_IDENTIFIER", "ADF_API");
this.sendBroadcast(i);

// GET RESULT CODE
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();
};

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: This generic code must be modified 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

auto_switch_to_default_on_event

0 - Disabled

1 - On connect

2 - On disconnect

3 - On connect/disconnect

More info

digimarc_decoding

false

true

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

keep_pairing_info_after_reboot

Enable/disable automatic re-connection to the connected Bluetooth scanner after device reboot. Applies only to connected Bluetooth scanners:

0 - Disable

1 - Enable

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_char

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_chars

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