Set Config

DataWedge 11.3

SET_CONFIG

Used to create, update or replace a DataWedge Profile and its settings, and can configure multiple options with a single intent action. SET_CONFIG implements nested bundles, where a PARAM_LIST (parameter list) bundle can be nested within its corresponding PLUGIN_CONFIG (option based on input, data processing, utilities, or output) bundle, which can then be nested within the main SET_CONFIG bundle. Multiple PLUGIN_CONFIG bundles can be nested within the SET_CONFIG bundle.

Figure 1. Visual representation of nested bundles.

To create a Profile without configuring its settings parameters, use 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) Applies to the Profile (from PROFILE_NAME). Can be used in place of CREATE_PROFILE. Options:
    • CREATE_IF_NOT_EXIST: If the Profile does not exist, it creates the Profile and sets the parameters specified in the SET_CONFIG intent. If the profile exists, it updates the parameters specified in the SET_CONFIG intent, while other parameters remain unchanged. RESET_CONFIG flag can be used to reset the plug-in to its default values before applying the new values specified in the intent.
    • OVERWRITE: If the Profile exists, all options are reset to the default, then the specified settings are applied.
    • UPDATE: Updates only specified settings. The specified Profile must exist in DataWedge. RESET_CONFIG flag can be used to reset the plug-in to its default values before applying the new values specified in the intent.
  • 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]: An array of bundles to be associated with the Profile. Each APP_LIST bundle contains the following properties:
    • PACKAGE_NAME [String]: The package name for the app to be associated with the profile. For example: "com.symbol.emdk.barcodesample1" or a wildcard (*) character.
    • ACTIVITY_LIST [List]: A list of activities from the PACKAGE_NAME. Wildcard (*) character is also supported.

PLUGIN_CONFIG BUNDLE

The PLUGIN_CONFIG bundle is configured using the following properties:

  • RESET_CONFIG [String]: Optional - applies to an existing Profile with CONFIG_MODE CREATE_IF_NOT_EXIST or UPDATE. Values:
  • True (Default) – Clear any existing configuration and create a new configuration with the specified parameter values
  • False – Merge existing configuration with changes from the new configuration - update the existing values and add values not already in the configuration
  • PLUGIN_NAME [String]: Name (case-sensitive) of the Plug-in to configure. See tables below for PARAM_LIST values. For DataWedge 6.5 and below, each intent involving a Plug-in requires a separate intent Action:
    • BARCODE input
    • MSR (Magnetic Stripe Reader) input
    • RFID (Radio-frequency Identification) input
    • SERIAL input
    • VOICE input
    • WORKFLOW input
    • BDF (Basic Data Formatting) processing
    • ADF (Advanced Data Formatting) processing
    • TOKENS (data formatting and ordering for Keystroke and IP output with UDI/Multi-barcode data) processing
    • INTENT output
    • KEYSTROKE output
    • IP (Internet Protocol) output
    • DCP (Data Capture Plus) utilities
    • EKB (Enterprise Keyboard) utilities
  • 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.
  • OUTPUT_PLUGIN_NAME [String]: Applies only to ADF and BDF when specified as the PLUGIN_NAME. Specifies the output plug-in associated with the ADF or BDF parameters:
    • KEYSTROKE
    • INTENT
    • IP

PARAM_LIST BUNDLE

The PARAM_LIST bundle is configured by specifying the parameter name and values from the respective PLUGIN_NAME parameter tables below. Applies to parameters matching the PLUGIN_NAME specified in PLUGIN_CONFIG bundle:

  • BARCODE – accepts values from the Scanner Input Parameters table below; specify decoder and other input settings as EXTRA_DATA in the PARAM_LIST nested bundle. It is required to specify which scanner the configurations apply to either by using scanner_selection set to auto, scanner_selection_by_identifier or configure_all_scanners

    • scanner_selection_by_identifier [string]- accepts a value from the list of Scanner Identifiers below.
    • configure_all_scanners [string]- true/false

    If set to “true”, the parameter scanner_selection_by_identifier is ignored and the configuration is saved as a Global Scanner Configuration. If there is any previous configuration for any individual scanners, they will be replaced with the new global configuration.
    If set to "false", the configuration will be saved for the individual selected scanner only. In the event the scanner selection is set to “Auto”, the current default scanner configuration is updated.

  • MSR - Accepts values from the MSR Input Parameters table below.

  • RFID - Accepts values from the RFID Input Parameters table below.

  • SERIAL - Accepts values from the Serial Input Parameters table below.

  • VOICE - Accepts values from the Voice Input Parameters table below.

  • WORKFLOW - Accepts values from the Workflow Input Parameters table below.

  • DCP - Accepts values from the DCP (Data Capture Plus) Utilities Parameters table below.

  • EKB - Accepts values from the Enterprise Keyboard Configuration Parameters table below.

  • BDF - Applies Basic Data Formatting rules to the acquired data. Accepts values from the BDF Processing Parameters table below.

  • ADF - Applies Advanced Data Formatting rules to the acquired data. This bundle contains Action, Device, Decoder and Label_ID sub-bundles. Accepts values from the ADF Processing Parameters table below. See Important for ADF section below.

  • TOKENS - Applicable for UDI or multibarcodes; accepts values from the Token Parameters table below.

  • INTENT - Accepts values from the Intent Output Parameters table below.

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

  • IP (Internet Protocol) - Accepts values from the IP Output Parameters table below.

IMPORTANT FOR ADF:

  • 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.


Figure 2. Visual representation of nested SET_CONFIG bundle. Bundles are designated in blue with corresponding properties listed. PLUGIN_NAME lists the name of the plug-ins (options) available to configure. Dotted arrows from each plug-in point to the corresponding PARAM_LIST, properties that can be configured for that particular plug-in. See example code.

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_DS2278 - DS2278 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
  • BLUETOOTH_ZEBRA - Generic Zebra Bluetooth scanner
  • USB_ZEBRA - Generic Zebra USB scanner

Result Codes

DataWedge returns the following error codes if the app includes the intent extras SEND_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
  • UNLICENSED_FEATURE - An attempt was made to call SetConfig or Switch Scanner Params API to change the scanning mode to MultiBarcode or NextGen SimulScan on an unlicensed Zebra Professional-series device.

Also see the Result Codes guide for more information.


Scanner Input Parameters

Refer to Barcode Input for more information on decoders, decoder parameters, and scan parameters.

See Decoders for supported decoders and decoder 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.


UPC/EAN Parameters

For more information, see UPC/EAN Params.

Parameter ID Parameter Value
databar_to_upc_ean true
false
upc_enable_marginless_decode true
false
upcean_security_level 0 - Level 0
1 - Level 1
2 - Level 2
3 - Level 3
upcean_supplemental2 true
false
upcean_supplemental5 true
false
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_linear_decode true
false
upcean_bookland true
false
upcean_coupon true
false
upcean_coupon_report 0 - Old Coupon Report Mode
1 - New Coupon Report Mode
2 - Both Coupon Report Modes
upcean_ean_zero_extend true
false
upcean_bookland_format 0 - Format ISBN-10
1 - Format ISBN-13

NextGen SimulScan Parameters

For more information, see Barcode Input.

Parameter ID Parameter Value
scanning_mode 3 - MultiBarcode
5 - Document Capture
doc_capture_template [Name of the Document Capture template]
common_barcode_dynamic_quantity Integer from 1 to 100 (default 5)

Barcode Highlighting Parameters

For more information, see Barcode Highlighting and sample code.

Parameter ID Parameter Value
barcode_highlighting_enabled true
false
rule_name [Name of rule]


Parameter ID and value for Criteria:

Criteria
Bundle
Key
Criteria Bundle Value Bundle ID Bundle Value Parameter ID Parameter Value
criteria Bundle identifier ArrayList of Bundles criteria_key min_length

max_length

contains

ignore_case
criteria_value min_length: integer 1 to 10000 (default = 0)

max_length: integer 1 to 10000 (default 0)

contains: string

ignore_case: true/false (default = false)
symbology Refer to decoder names in decoders. Pass the decoder name(s) as a string array. N/A N/A


Parameter ID and value for Action:

Action Bundle Key Action Bundle Value Parameter ID Parameter Value
actions ArrayList of Bundles action_key fillcolor
action_value [Hex value of the fill color, e.g.: #FFFF0008]

UDI Parameters

For more information, see Barcode Input.

Parameter ID Parameter Value
enable_udi_gs1 true
false
enable_udi_hibcc true
false
enable_udi_iccbba true
false

OCR Parameters

For more information, see Barcode Input.

Parameter ID Parameter Value
ocr_orientation DEGREE_0 (0) (default)
DEGREE_270 (1)
DEGREE_180 (2)
DEGREE_90 (3)
OMNIDIRECTIONAL (4)
ocr_lines Set number of lines to scan during OCR reading:

LINE_1 (1) (default)
LINE_2 (2)
LINE_3 (3)
ocr_min_chars Set minimum number of OCR characters (not including spaces) per line to decode during OCR reading. Integer value:

Low - 3 (default)
High - 100
ocr_max_chars Set maximum number of OCR characters (not including spaces) per line to decode during OCR reading. Integer value:

Low - 3 (default)
High - 100
ocr_subset Defines a custom group of characters in place of a preset font variant.

Minimum length - 1
Maximum Length - 100
ocr_quiet_zone Set field width of blank space to stop scanning during OCR reading. The default is 50, indicating a six character width quiet zone. Integer values:

Low - 20
High - 99 (Default - 50)
ocr_template Creates a template for precisely matching scanned OCR characters to a desired input format, which helps eliminate scanning errors. The template expression is formed by numbers and letters. The default is 99999999 which accepts any alphanumeric character OCR string. If there are less than 8 '9' characters, the '9' represents only digit values.

Minimum length - 3
Maximum Length - 100 (Default - 99999999)

See OCR Params for more information.
ocr_check_digit_modulus Sets the Check Digit Modulus value for OCR Check Digit Calculation. Integer value:

Low - 1 (default)
High - 99
ocr_check_digit_multiplier Sets OCR check digit multipliers for the character positions.

Minimum length - 1
Maximum Length - 100 (Default - 121212121212)
ocr_check_digit_validation None - 0 (default)
Product Add Left to Right - 3
Product Add Right to Left - 1
Digit Add Left to Right - 4
Digit Add Right to Left - 2
Product Add Right to Left Simple Remainder - 5
Digit Add Right to Left Simple Remainder - 6
Health Industry - HIBCC43 - 9
inverse_ocr White or light words on black or dark background. This option is used to select normal, inverse or both OCR scanning.

REGULAR_ONLY (0) (default)
INVERSE_ONLY (1)
AUTO_DISCRIMINATE (2)


Other Scanner Input Parameters

Parameter ID Parameter Value
presentation_mode_sensitivity 80 - Low
120 - Medium
190 - High (default)
More info
barcode_trigger_mode 0 - Disabled
1 - Enabled
More info
auto_switch_to_default_on_event 0 - Disabled
1 - On connect
2 - On disconnect
3 - On connect/disconnect
More info
digimarc_decoding true
false
scanning_mode 1 - Single
2 - UDI - supported on selected Zebra devices up to Android P (version 9.x) only
multi_barcode_count Integer from 2–100
instant_reporting_enable true
false
report_decoded_barcodes true
false
scanner_selection_by_identifier See Scanner Identifiers table.
(*) See Notes below this table for more information.
scanner_trigger_resource LEFT
RIGHT
CENTER
GUN
PROXIMITY
KEY_MAPPER_SCAN
KEY_MAPPER_L1
KEY_MAPPER_R1
WIRED_LEFT
WIRED_RIGHT
trigger-wakeup true
false
scanner_input_enabled true
false
scanner_selection auto
0-n (valid scanner index from ENUMERATE_SCANNERS API)
aim_mode on - On
off - Off
beam_timer Integer from 0–60000
Adaptive_Scanning 0 - Enable
1 - Disable
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 0 - Triggered Mode
7 - Presentation 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
4 - Presentation
5 - Continuous Read
6 - Press and Sustain
7 – Press and Continue
8 - Timed Continuous

More info
scene_detect_qualifier 0 - None
1 - Proximity Sensor Input
aim_timer Integer from 0–60000
same_barcode_timeout Integer from 0–5000
trigger_wakeup_scan true
false
different_barcode_timeout Integer from 0–5000
illumination_mode off - Off
torch - On
illumination_brightness Integer from 0–10
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
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 AUTO
UTF-8
ISO-8859-1
Shift_JIS
GB18030
auto_charset_preferred_order List preferred options in priority order within a single string separated by a semi-colon:
     Example 1: "UTF-8;GB2312"
     Example 2: "GB2312;UTF-8"
auto_charset_failure_option NONE
UTF-8
ISO-8859-1
Shift_JIS
GB18030
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 true
false
bt_disconnect_on_exit true
false
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 true
false
good_decode_led_timer Integer from 0–1000
decoding_led_feedback true
false
decoder_usplanet_report_check_digit true
false
decode_screen_notification true
false
decode_screen_time Length of time (in milliseconds) to display the screen notification upon successful decode.

1000 (default)
500-1500
decode_screen_translucency Sets the translucency value for the decode notification green screen - higher values result to more translucency. Values range from 20 to 50 in increments of 5:

20, 25, 30, 35 (default), 40, 45, 50
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
dpm_illumination_control Controls the illumination for decoding DPM barcodes. Default value is 10. Values:

0 - Direct
11 - Indirect
10 - Cycle

More info
dpm_mode Optimize DPM barcode decoding performance based on the barcode size. Default value is 2. Values:

0 – Disabled
1 – Mode 1
2 – Mode 2

More info
qr_launch_enable true
false
qr_launch_enable_qr_decoder true
false
qr_launch_show_confirmation_dialog true
false
nodecode_time Integer from 0 to 180000 in 1000 increments


(*) Notes related to scanner_selection_by_identifier:

  • Sending "auto" as the scanner identifier in the multiple scanner bundle returns error code "PARAMETER_INVALID" with more detailed error code "AUTO_NOT_SUPPORTED_IN_MULTI_SCANNER_MODE".
  • Sending an unsupported trigger does not return any error code.
  • If the same trigger is assigned to a different scanner in a different scanner category, the scanner that is processed last gets the priority. Processing order of the plugins cannot be guaranteed.
  • Only one internal scanner can be added. If an attempt is made to add another internal scanner, the scanner that is processed last gets the priority. Processing order of the plugins cannot be guaranteed.
  • Although triggers can be set that are not supported by that device, only supported triggers are displayed in the UI.
  • When using multiple scanners, the parameter scanner_selection_by_identifier must be used with DataWedge APIs such as SWITCH_SCANNER_PARAMS, SOFT_SCAN_TRIGGER, etc. Otherwise error COMMAND_NOT_SUPPORTED is encountered.

MSR Input Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
msr_input_enabled true
false

RFID Input Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
rfid_input_enabled true
false
rfid_beeper_enable true
false
rfid_led_enable true
false
rfid_antenna_transmit_power Integer from 5 to 30
rfid_memory_bank 0 - None (default)
1 - User
2 - Reserved
3 - TID (tag identification
4 - EPC (electronic product code)
rfid_session 0 - Session 0
1 - Session 1 (default)
2 - Session 2
3 - Session 3
rfid_filter_duplicate_tags true
false
rfid_hardware_trigger_enabled true
false
rfid_trigger_mode 0 - Immediate (default)
1 - Continuous
rfid_tag_read_duration Integer from 100 to 60000
rfid_link_profile Integer from 0 to 11
Integer range is subject to change based on the reader model.
rfid_dynamic_power_mode true
false
Pre-filter PARAM_LIST
rfid_pre_filter_enable true
false
rfid_pre_filter_tag_pattern [blank]
[any string]
rfid_pre_filter_target Integer from 0 to 4
rfid_pre_filter_memory_bank Integer from 0 to 2
rfid_pre_filter_offset Integer from 0 to 1024
rfid_pre_filter_action Integer from 0 to 7
Post-filter PARAM_LIST
rfid_post_filter_enable true
false
rfid_post_filter_no_of_tags_to_read Integer from 0 to 1000
rfid_post_filter_rssi Integer from -100 to 0

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.

Parameter ID Parameter Value
serial_port_id 0–n (must be a valid index)
serial_input_enabled true
false
serial_baudrate 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800 or 921600
serial_databits 7
8
serial_parity NONE
ODD
EVEN
MARK
SPACE
serial_stopbits 1
2
serial_flow FLOW_NONE, FLOW_RTS_CTS or FLOW_XON_XOFF

Voice Input Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
voice_input_enabled true
false
voice_data_capture_start_option 0 - Start phrase
1 - PTT button
voice_data_capture_start_phrase start (default)
voice_data_capture_end_phrase [blank] (default)
voice_end_detection_timeout 0-30 (in seconds)
voice_data_type 0 - Any
1- Alpha
2 - Numeric
voice_start_phrase_waiting_tone true
false
voice_data_capture_waiting_tone true
false
voice_validation_window true
false
voice_offline_speech true
false
voice_command_tab_enabled true
false (default)
voice_command_tab_phrase send tab (default)
voice_command_enter_enabled true
false (default)
voice_command_enter_phrase send enter (default)
voice_command_move_next_enabled true
false (default)
voice_command_move_next_phrase move next (default)
voice_command_move_previous_enabled true
false (default)
voice_command_move_previous_phrase move previous (default)
voice_command_escape_enabled true
false (default)
voice_command_escape_phrase send escape (default)
voice_command_clear_enabled true
false (default)
voice_command_clear_phrase clear (default)

Workflow Input Parameters

All parameters are case sensitive.

For more information, see Workflow Input.

Parameter ID Parameter Value
workflow_input_enabled true
false
selected_workflow_name license_plate
id_scanning
vin_number
tin_number
container_scanning
meter_reading
free_form_capture
workflow_input_source 1 - imager
2 - camera

License Plate

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specifies the input source; only camera is supported for OCR
Session Timeout session_timeout LicenseDecoderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Output Image output_image LicenseDecoderModule full - Full (default)
none - None
Output the frame (image) captured from which the data is decoded
Region Selection scanMode LicenseDecoderModule auto - EU (European Union) (default)
unitedstates - USA
Select scan mode based on the region of the license plate
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Identification Document

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specifies the input source; only camera is supported for OCR
Session Timeout session_timeout IDDecoderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Output Image output_image IDDecoderModule full - Full (default)
none - None
Output the frame (image) captured from which the data is decoded
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Vehicle Identification Number (VIN)

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specifies the input source; only camera is supported for OCR
Session Timeout session_timeout VinDecoderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Output Image output_image VinDecoderModule full - Full (default)
none - None
Output the frame (image) captured from which the data is decoded
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Tire Identification Number (TIN)

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specifies the input source; only camera is supported for OCR
Session Timeout session_timeout TinDecoderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Output Image output_image TinDecoderModule full (default)
none
Output the frame (image) captured from which the data is decoded
TIN Type scanMode TinDecoderModule STRICT – US DOT 1 (Length: 15 or 16 characters; Pattern: DOT (3 characters), 2-3 characters representing the plant code, 6 characters representing the manufacturer code and 4 digits representing the manufacturing date)
Flexible - US DOT 2 (Length: 11 to 16 characters)
Select scan mode for TIN reading
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Shipping Container ID

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specify the input source; only camera is supported for OCR
Session Timeout session_timeout ContainerDecoderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Zoom zoom CameraModule Integer range: 1 – 8 (increments of 1)
Default: 1
Specify the camera zoom value
Output Image output_image ContainerDecoderModule full - Full (default)
none -None
Output the frame (image) captured from which the data is decoded
Orientation orientation ContainerDecoderModule horizontal - Horizontal (default)
vertical - Vertical
Specify the orientation type
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Meter

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 2 - Camera Specifies the input source; only camera is supported for OCR
Session Timeout session_timeout MeterReaderModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination CameraModule on - On
off - Off (default)
Turn on/off illumination during scanning
Output Image output_image MeterReaderModule full - Full (default)
none - None
Output the frame (image) captured from which the data is decoded
Meter Type scanMode MeterReaderModule AUTO_ANALOG_DIGITAL_METER – Analog, Digital, or Digital Dot Matrix Meter (default)
DIAL_METER - Dial Meter
Specify the meter type: analog, digital, digital dot matrix, or dial.
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.


Free-Form Image Capture

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 1- Imager (default)
2 - Camera
Specifies the input source.
Session Timeout session_timeout BarcodeTrackerModule Integer range: 0 – 60000 (increments of 500)
Default: 10000
Specify the timeout period
Illumination illumination BarcodeTrackerModule on - On (default)
off - Off
Turn on/off illumination during scanning
Decode And Highlight Barcodes decode_and_highlight_barcodes BarcodeTrackerModule 1 – Off
2 – Highlight (default)
3 – Decode and Highlight
Specify whether to decode and highlight barcodes, only highlight barcodes, or neither.
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.

Document Capture

Parameter Name Parameter ID Module ID Parameter Value
(API value - UI value)
Description
Input Source workflow_input_source N/A 1- Imager (default)
2 - Camera
Specifies the input source.
Session Timeout session_timeout BarcodeTrackerModule Integer range: 0 – 60000 (increments of 500)
Default: 15000
Specify the timeout period
Illumination illumination BarcodeTrackerModule on - On (default)
off - Off
Turn on/off illumination during scanning
Barcode Presence barcode_presence BarcodeTrackerModule mandatory – Mandatory
optional – Optional (default)
Specify whether it is required for the barcode to be present
Document Highlight Mode document_highlight_mode BarcodeTrackerModule border_only - Border Only (default)
fill - Fill
Specify the document area to highlight
Document Highlight Color document_highlight_color BarcodeTrackerModule Default color code: 1711322368 - #6600B500 Select the color to highlight the document through the color selector dialog
Decode Audio Feedback decode_audio_feedback_uri FeedbackModule [name of tone retrieved from Decode Audio Feedback in DataWedge UI] Specify an audio tone to play for a successful decode
Decode Haptic Feedback decode_haptic_feedback FeedbackModule 0 – False (default)
1 – True
Enable/disable the device to vibrate for a successful decode
Decoding LED Notification decoding_led_feedback FeedbackModule 0 – False (default)
1 – True
When enabled, the green LED flashes to indicate a successful decode
Beep Volume Channel volume_slider_type FeedbackModule 0 – Ringer (Uses Ringer volume setting for audio feedback)
1 – Music and Media (Uses Music and Media volume setting for audio feedback)
2 – Alarms (Uses the Alarms volume setting for audio feedback)
3 – Notification (Uses Notification volume setting for audio feedback - default)
Select the volume setting to be used when playing the Decode Audio Feedback.

DCP Utilities Parameters

All parameters are case sensitive.

Parameter ID Parameter Value Description
dcp_input_enabled true
false
Enable/Disable Data Capture Plus input
dcp_dock_button_on LEFT - Left only
RIGHT - Right only
BOTH - Left or Right
Position location for dock button: left side, right side, either right or left side (both)
dcp_start_in FULLSCREEN
BUTTON
BUTTON_ONLY
Sets the mode that DCP will startup with: full screen, button (floating button that can be re-positioned by dragging and dropping), and button only (cannot be re-positioned)
dcp_highest_pos 0-100 Sets a ceiling for button position expressed as a percentage of total screen height. For example, on a screen measuring four inches vertically, a setting of 75 (%) would prevent the upper edge of the DCP button from being positioned less than one inch from the top of the screen.
dcp_lowest_pos 0-100 Sets a floor for button position expressed as a percentage of total screen height. For example, on a screen measuring four inches vertically, a setting of 25 (%) would prevent the lower edge of the DCP button from being positioned less than one inch from the bottom of the screen.
dcp_drag_detect_time 0-1000 Wait time (in ms) that DCP should wait after a screen tap before triggering a scanner action. This can help prevent accidental triggers when dragging the DCP button to a new location.


See DCP Input.


Enterprise Keyboard Configuration Parameters

All parameters are case sensitive.

Parameter ID Parameter Value Description
ekb_enabled true
false
Enable/Disable Enterprise Keyboard
ekb_layout Bundle that accepts values:
  • layout_group [string]
  • layout_name [string]
Specify layout_group and layout_name that matches that displayed in DataWedge UI for Enterprise Keyboard Configuration. Both names are set from Enterprise Keyboard Designer: layout_group is based on the project name and layout_name is based on the layout name specified. Use null for ekb_layout to set to default, the standard Enterprise Keyboard.



BDF Processing Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
bdf_enabled true
false
bdf_prefix [string to prepend acquired data]
bdf_suffix [string to append acquired data]]
bdf_send_data true
false
bdf_send_hex true
false
bdf_send_tab true
false
bdf_send_enter true
false

ADF Processing Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
adf_enabled true
false (default)
ADF_RULE Bundle that accepts 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 that can have multiple instances; accepts values:
  • type [string] - Name of Action from ADF Actions table
  • [action_param_1], [action_param_2]... (as determined by ADF Action; see table)
DEVICES Bundle that can have multiple instances; accepts values:
  • device_id [string] - Name of the input source: BARCODE, MSR, RFID, SERIAL or VOICE
  • 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 that can have multiple instances; accepts values:
  • device_id [string] - BARCODE, MSR, RFID, SERIAL or VOICE
  • decoder [string] - (i.e. "Australian Postal")
  • enabled [string] - true/false (default=true)
LABEL_IDS Bundle that can have multiple instances; accepts values:
  • device_id [string] - BARCODE, MSR, RFID, SERIAL or VOICE
  • label_id [string] - UDI_GS1, UDI_HIBCC or UDI_ICCBBA
  • enabled [string] - true/false (default=true)

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)

Notification

BEEP
action_param_1

Sets the notification tone. Refer to the DataWedge UI for guidance to retrieve the tone name, which may vary by device and Android version. E.g.:
Bundle bParamsAction1 = new Bundle();
bParamsAction1.putString("type","BEEP");
bParamsAction1.putString("action_param_1","Drip"); // ringtone name

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.

Token Parameters

Applicable for UDI or multibarcodes.

All parameters are case sensitive.

Parameter ID Parameter Value
send_tokens_option DISABLED
TOKENS
BARCODES_TOKENS
token_separator TAB
CR
LF
NONE
multibarcode_separator TAB
CR
LF
NONE
token_order name: manufacturing_date_original
enabled: true/false

name: expiration_date_original
enabled: true/false

name: di
enabled: true/false
(Note: "di" stands for device identifier.)

name: lot_number
enabled: true/false

name: serial_number
enabled: true/false

name: mpho_lot_number
enabled: true/false

name: donation_id
enabled: true/false

name: labeler_identification_code
enabled: true/false

name: product_or_catalog_number
enabled: true/false

name: unit_of_measure_id
enabled: true/false

name: quantity
enabled: true/false

* DataWedge determines the priority order according to the order of items listed in the ArrayList, with Element 0 having the highest priority.


See UDI Data Output in IP Output or Keystroke Output


Intent Output Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
intent_output_enabled true
false
intent_action [exact name of the action]
intent_category [exact name of the category]
intent_delivery 0 - Start Activity
1 - Start Service
2 - Broadcast
intent_component_info
[bundle array]
[bundle]
PACKAGE_NAME [String] Package name of the app to retrieve intent data
E.g.: com.symbol.app1
SIGNATURE [String] SHA1 hash value that represents the application signature. Refer to the example code on how to retrieve SHA1 of application signature.
E.g.: 084421EAE1A65EEBCB68D4341FE3C2BB6BEC9A
[bundle]
PACKAGE_NAME [String] Package name of the app to retrieve intent data.
E.g. com.symbol.app1
SIGNATURE [String] SHA1 hash value that represents the application signature.
E.g.: 084421EAE1A65EEBCB68D4341FE3C2BB6BEC9A
[bundle]
PACKAGE_NAME [String] Package name of the app to retrieve intent data.
E.g.: com.symbol.app1
SIGNATURE [String] SHA1 hash value that represents the application signature.
E.g.: 084421EAE1A65EEBCB68D4341FE3C2BB6BEC9A
intent_use_content_provider true
false

Keystroke Output Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
keystroke_output_enabled true
false
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 true
false
keystroke_send_chars_as_events true
false (default)
keystroke_send_control_chars_as_events true
false (default)
keystroke_send_tab_as_string true
false (default)

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.

IP Output Parameters

All parameters are case sensitive.

Parameter ID Parameter Value
ip_output_enabled true
false
ip_output_ip_wedge_enabled true
false
ip_output_protocol TCP
UDP
ip_output_address [Valid IP Address format]
ip_output_port 1 – 65535

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 Barcode Highlighting parameters

Configure Barcode Highlighting within a profile:

public void setHighlightBarcodes() {

    Bundle bMain = new Bundle();
    bMain.putString("PROFILE_NAME", "Demo");
    bMain.putString("PROFILE_ENABLED", "true");
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");


    Bundle bConfig = new Bundle();
    bConfig.putString("PLUGIN_NAME", "BARCODE");
    bConfig.putString("RESET_CONFIG", "true");



    Bundle bParams = new Bundle();
    bParams.putString("scanner_selection", "auto");
    bParams.putString("scanner_input_enabled", "true");
    bParams.putString("barcode_highlighting_enabled", "true"); // true , false

    /*##### Rules configuration start #####*/
    Bundle rule1 = new Bundle();
    rule1.putString("rule_name","Rule1");
    Bundle rule1Criteria = new Bundle();

    Bundle bundleMinLength = new Bundle();
    bundleMinLength.putString("criteria_key","min_length");
    bundleMinLength.putString("criteria_value","1");

    Bundle bundleMaxLength = new Bundle();
    bundleMaxLength.putString("criteria_key","max_length");
    bundleMaxLength.putString("criteria_value","10");

    Bundle bundleContains = new Bundle();
    bundleContains.putString("criteria_key","contains");
    bundleContains.putString("criteria_value","abc");

    Bundle bundleIgnoreCase = new Bundle();
    bundleIgnoreCase.putString("criteria_key","ignore_case");
    bundleIgnoreCase.putString("criteria_value","true");

    ArrayList<Bundle> identifierParamList = new ArrayList<>();
    identifierParamList.add(bundleMinLength);
    identifierParamList.add(bundleMaxLength);
    identifierParamList.add(bundleContains);
    identifierParamList.add(bundleIgnoreCase);

    rule1Criteria.putParcelableArrayList("identifier",identifierParamList);

    rule1Criteria.putStringArray("symbology",new String[]{"decoder_qrcode","decoder_upca"});
    rule1.putBundle("criteria",rule1Criteria);

    Bundle bundleFillColor = new Bundle();
    bundleFillColor.putString("action_key","fillcolor");
    bundleFillColor.putString("action_value","#FFFF0008");

    ArrayList<Bundle> rule1Actions = new ArrayList<>();
    rule1Actions.add(bundleFillColor);

    rule1.putParcelableArrayList("actions",rule1Actions);

    ArrayList<Bundle> barcodeOverlayRuleList = new ArrayList<>();
    barcodeOverlayRuleList.add(rule1);

    /**
    * report data
    */
    /*##### Report data for rule Start #####*/
    Bundle rule2 = new Bundle();
    rule2.putString("rule_name","Rule2");
    Bundle rule2Criteria = new Bundle();

    Bundle rule2BundleMinLength = new Bundle();
    rule2BundleMinLength.putString("criteria_key","min_length");
    rule2BundleMinLength.putString("criteria_value","2");

    Bundle rule2BundleMaxLength = new Bundle();
    rule2BundleMaxLength.putString("criteria_key","max_length");
    rule2BundleMaxLength.putString("criteria_value","4");

    Bundle rule2BundleContains = new Bundle();
    rule2BundleContains.putString("criteria_key","contains");
    rule2BundleContains.putString("criteria_value","test1234");

    Bundle rule2BundleIgnoreCase = new Bundle();
    rule2BundleIgnoreCase.putString("criteria_key","ignore_case");
    rule2BundleIgnoreCase.putString("criteria_value","false");

    ArrayList<Bundle> rule2IdentifierParamList = new ArrayList<>();
    rule2IdentifierParamList.add(rule2BundleMinLength);
    rule2IdentifierParamList.add(rule2BundleMaxLength);
    rule2IdentifierParamList.add(rule2BundleContains);
    rule2IdentifierParamList.add(rule2BundleIgnoreCase);

    rule2Criteria.putParcelableArrayList("identifier",rule2IdentifierParamList);
    rule2Criteria.putStringArray("symbology",new String[]{"decoder_grid_matrix"});
    rule2.putBundle("criteria",rule2Criteria);

    Bundle rule2BundleStrokeColor = new Bundle();
    rule2BundleStrokeColor.putString("action_key","report");

    ArrayList<Bundle> rule2Actions = new ArrayList<>();
    rule2Actions.add(rule2BundleStrokeColor);
    rule2.putParcelableArrayList("actions",rule2Actions);

    ArrayList<Bundle> reportDataRuleList = new ArrayList<>();
    reportDataRuleList.add(rule2);
    /*##### Report data for rule End #####*/
    Bundle ruleBundleBarcodeOverlay = new Bundle();
    ruleBundleBarcodeOverlay.putString("rule_param_id","barcode_overlay");
    ruleBundleBarcodeOverlay.putParcelableArrayList("rule_list", barcodeOverlayRuleList);

    Bundle ruleBundleReportData = new Bundle();
    ruleBundleReportData.putString("rule_param_id","report_data");
    ruleBundleReportData.putParcelableArrayList("rule_list", reportDataRuleList);

    ArrayList<Bundle> ruleParamList = new ArrayList<>();
    ruleParamList.add(ruleBundleBarcodeOverlay);
    ruleParamList.add(ruleBundleReportData);
    /*##### Rules configuration end #####*/

bParams.putParcelableArrayList("barcode_highlighting_rules", ruleParamList);

    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);
    i.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    this.sendBroadcast(i);

}

Set OCR parameters

Create/update a profile with OCR parameters:

void createBarcodeScanProfileWithOCR() {

        Bundle bMain = new Bundle();
        bMain.putString("PROFILE_NAME", "OcrBarcodeApp");
        bMain.putString("PROFILE_ENABLED", "true");
        bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
        Bundle bConfig = new Bundle();
        bConfig.putString("PLUGIN_NAME", "BARCODE");
        bConfig.putString("RESET_CONFIG", "true");

        Bundle bParams = new Bundle();
        bParams.putString("scanner_selection", "auto");
        bParams.putString("scanner_input_enabled", "true");

        //Enable/Disable Decoders
        bParams.putString("decoder_ocr_a", "true"); //Enable or Disable OCR-A font
        bParams.putString("decoder_ocr_b", "true"); //Enable or Disable OCR-B font
        bParams.putString("decoder_micr", "true"); //Enable or Disable OCR MICR E13B font
        bParams.putString("decoder_us_currency", "true"); //Enable or Disable OCR US Currency font

        //Ocr A and B Variants
        bParams.putString("ocr_a_variant", "3"); //0 - FULL_ASCII, 1 - RESERVED_1, 2 - RESERVED_2,3 - BANKING
        bParams.putString("ocr_b_variant", "6"); //0 - FULL_ASCII, 1 - BANKING, 2 - LIMITED, 6 - ISBN_1, 7 - ISBN_2, 3 - TRAVEL_DOCUMENT_1, 8 - TRAVEL_DOCUMENT_2, 20 - TRAVEL_DOCUMENT_3, 4 - PASSPORT, 9 - VISA_TYPE_A, 10 - VISA_TYPE_B, 11 - ICAO_TRAVEL_DOCUMENT

        //Other OCR Params

        //Specify the orientation of an OCR String to be read
        bParams.putString("ocr_orientation", "1"); //Supported Values: 0 - DEGREE_0, 1 - DEGREE_270, 2 - DEGREE_180, 3 - DEGREE_90, 4 - OMNIDIRECTIONAL

        //Select number of lines to scan during OCR reading
        bParams.putString("ocr_lines", "2"); //Supported Values: 1 - LINE_1, 2 - LINE_2, 3 - LINE_3

        //Select minimum number of OCR characters (not including spaces) per line to decode during OCR reading
        bParams.putString("ocr_min_chars", "10"); //Supported Values: 3 to 100 in steps of 1

        //Select maximum number of OCR characters (including spaces) per line to decode during OCR reading
        bParams.putString("ocr_max_chars", "15"); //Supported Values: 3 to 100 in steps of 1

        //OCR Subset defines a custom group of characters in place of a preset font variant
        bParams.putString("ocr_subset", "!\"#$%()*+,-./0123456789<>ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz\\^|"); //Minimum length - 1, Maximum Length - 100

        //Set field width of blank space to stop scanning during OCR reading
        bParams.putString("ocr_quiet_zone", "60"); //Supported Values: 20 to 99 in steps of 1

        //This option creates a template for precisely matching scanned OCR characters to a desired input format.
        // Carefully constructing an OCR template eliminates scanning errors.
        // The template expression will be formed by numbers and letters.
        // The default is 99999999 which accepts any character OCR strings.
        bParams.putString("ocr_template", "AAA");

        //Sets the Check Digit Modulus value for OCR Check Digit Calculation
        bParams.putString("ocr_check_digit_modulus", "10"); //Supported Values: 1 to 99 in steps of 1

        //Sets OCR check digit multipliers for the character positions
        bParams.putString("ocr_check_digit_multiplier", "121212121212"); //Minimum length - 1, Maximum Length - 100 (Default - 121212121212)

        //Selects Check Digit Validation Scheme
        bParams.putString("ocr_check_digit_validation", "3"); //Supported Values: 0 - None, 3 - Product Add Left to Right, 1 - Product Add Right to Left, 4 - Digit Add Left to Right, 2 - Digit Add Right to Left, 5 - Product Add Right to Left Simple Remainder, 6 - Digit Add Right to Left Simple Remainder, 9 - Health Industry - HIBCC43

        //Inverse OCR is white or light words on black or dark background. This option is used to select normal, inverse or both OCR scanning
        bParams.putString("inverse_ocr", "2"); //0 - REGULAR_ONLY, 1 - INVERSE_ONLY, 2 - AUTO_DISCRIMINATE

        bConfig.putBundle("PARAM_LIST", bParams);
        ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();
        bundlePluginConfig.add(bConfig);

        bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);

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

        this.sendBroadcast(i);
}

Set License Plate configuration

Configure License Plate parameters from Mobility DNA OCR in Workflow Input:

void setLicensePlateConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "license_plate");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","license_plate");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","LicenseDecoderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "15000");
    moduleContainerDecoderModule.putString("output_image", "full");
    moduleContainerDecoderModule.putString("scanMode", "unitedstates"); //unitedstates, auto
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "on");
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "true");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Heaven");
    moduleParamsFeedback.putString("volume_slider_type", "2");// 0- Ringer, 1- Music and Media, 2-Alarms, 3- Notification
    moduleParamsFeedback.putString("decoding_led_feedback", "false");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Identification Document configuration

Configure Identification Document parameters from Mobility DNA OCR in Workflow Input:

void setIdentificationDocumentConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "id_scanning");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","id_scanning");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","IDDecoderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "12000");
    moduleContainerDecoderModule.putString("output_image", "none");
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "off");
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "false");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Iridium");
    moduleParamsFeedback.putString("volume_slider_type", "1");// 0- Ringer, 1- Music and Media, 2-Alarms, 3- Notification
    moduleParamsFeedback.putString("decoding_led_feedback", "true");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);

    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);

    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Vehicle Identification Number (VIN) configuration

Configure VIN from Mobility DNA OCR in Workflow Input:

void setVehicleIdentificationConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "vin_number");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","vin_number");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","VinDecoderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "15000");
    moduleContainerDecoderModule.putString("output_image", "full");
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "on");
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "true");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Heaven");
    moduleParamsFeedback.putString("volume_slider_type", "2");// 0- Ringer, 1- Music and Media, 2-Alarms, 3- Notification
    moduleParamsFeedback.putString("decoding_led_feedback", "false");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Tire Identification Number (TIN) configuration

Configure TIN from Mobility DNA OCR in Workflow Input:

void setTireIdentificationConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "tin_number");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","tin_number");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","TinDecoderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "15000");
    moduleContainerDecoderModule.putString("output_image", "full");
    moduleContainerDecoderModule.putString("scanMode", "STRICT"); //STRICT,Flexible
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "on");
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "true");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Heaven");
    moduleParamsFeedback.putString("volume_slider_type", "3");// 0- Ringer, 1- Music and Media, 2-Alarms, 3- Notification
    moduleParamsFeedback.putString("decoding_led_feedback", "false");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Shipping Container ID configuration

Configure Shipping Container ID parameters from OCR Wedge in Workflow Input:

void setShippingContainerIdConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "container_scanning");
    bConfigWorkflow.putString("workflow_input_source", "2");

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","container_scanning");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","ContainerDecoderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "16000");
    moduleContainerDecoderModule.putString("output_image", "full");
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "on");
    moduleCameraModule.putString("zoom", "3"); //set value 1-8 default is 1
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "true");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Drip");
    moduleParamsFeedback.putString("volume_slider_type", "2");
    moduleParamsFeedback.putString("decoding_led_feedback", "true");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Meter configuration

Configure Meter parameters from Mobility DNA OCR in Workflow Input:

void setMeterConfiguration()
{
    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "meter_reading");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","meter_reading");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","MeterReaderModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "15000");
    moduleContainerDecoderModule.putString("output_image", "full");
    moduleContainerDecoderModule.putString("scanMode", "DIAL_METER"); //DIAL_METER, AUTO_ANALOG_DIGITAL_METER
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetCameraModule = new Bundle();
    paramSetCameraModule.putString("module","CameraModule");
    Bundle moduleCameraModule = new Bundle();
    moduleCameraModule.putString("illumination", "on");
    paramSetCameraModule.putBundle("module_params",moduleCameraModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "true");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Heaven");
    moduleParamsFeedback.putString("volume_slider_type", "2");
    moduleParamsFeedback.putString("decoding_led_feedback", "false");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);
    paramSetList.add(paramSetCameraModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set Free-Form Image Capture configuration

Configure Free-Form Image Capture parameters from Mobility DNA OCR in Workflow Input:

void setFreeFormConfiguration()
{

    Bundle bMain = new Bundle();

    Bundle bConfigWorkflow = new Bundle();
    ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

    /*###### Configurations for Workflow Input [Start] ######*/
    bConfigWorkflow.putString("PLUGIN_NAME", "WORKFLOW");
    bConfigWorkflow.putString("RESET_CONFIG", "true"); //Reset existing configurations of barcode input plugin

    bConfigWorkflow.putString("workflow_input_enabled", "true");
    bConfigWorkflow.putString("selected_workflow_name", "free_form_capture");
    bConfigWorkflow.putString("workflow_input_source", "2"); //input source 1- imager, 2- camera

    /*###### Configurations for Workflow Input [Finish] ######*/

    Bundle paramList = new Bundle();
    paramList.putString("workflow_name","free_form_capture");
    paramList.putString("workflow_input_source","2");

    Bundle paramSetContainerDecoderModule = new Bundle();
    paramSetContainerDecoderModule.putString("module","BarcodeTrackerModule");
    Bundle moduleContainerDecoderModule = new Bundle();
    moduleContainerDecoderModule.putString("session_timeout", "16000");
    moduleContainerDecoderModule.putString("illumination", "off");
    moduleContainerDecoderModule.putString("decode_and_highlight_barcodes", "1"); //1-off, 2-highlight, 3- decode and highlight
    paramSetContainerDecoderModule.putBundle("module_params",moduleContainerDecoderModule);

    Bundle paramSetFeedbackModule = new Bundle();
    paramSetFeedbackModule.putString("module","FeedbackModule");
    Bundle moduleParamsFeedback = new Bundle();
    moduleParamsFeedback.putString("decode_haptic_feedback", "false");
    moduleParamsFeedback.putString("decode_audio_feedback_uri", "Electra");
    moduleParamsFeedback.putString("volume_slider_type", "0");// 0- Ringer, 1- Music and Media, 2-Alarms, 3- Notification
    moduleParamsFeedback.putString("decoding_led_feedback", "true");
    paramSetFeedbackModule.putBundle("module_params",moduleParamsFeedback);

    ArrayList<Bundle> paramSetList = new ArrayList<>();
    paramSetList.add(paramSetContainerDecoderModule);
    paramSetList.add(paramSetFeedbackModule);

    paramList.putParcelableArrayList("workflow_params", paramSetList);

    ArrayList<Bundle> workFlowList = new ArrayList<>();
    workFlowList.add(paramList);

    bConfigWorkflow.putParcelableArrayList("PARAM_LIST", workFlowList);
    bundlePluginConfig.add(bConfigWorkflow);


    /*###### Configurations for Intent Output [Start] ######*/
    Bundle bConfigIntent = new Bundle();
    Bundle bParamsIntent = new Bundle();
    bConfigIntent.putString("PLUGIN_NAME", "INTENT");
    bConfigIntent.putString("RESET_CONFIG", "true"); //Reset existing configurations of intent output plugin
    bParamsIntent.putString("intent_output_enabled", "true"); //Enable intent output plugin
    bParamsIntent.putString("intent_action", INTENT_OUTPUT_ACTION); //Set the intent action
    bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT"); //Set a category for intent
    bParamsIntent.putInt("intent_delivery", 2); // Set intent delivery mechanism, Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
    bParamsIntent.putString("intent_use_content_provider", "true"); //Enable content provider
    bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);
    bundlePluginConfig.add(bConfigIntent);
    /*###### Configurations for Intent Output [Finish] ######*/

    //Putting the INTENT and BARCODE plugin settings to the PLUGIN_CONFIG extra
    bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


    /*###### Associate this application to the profile [Start] ######*/
    Bundle configApplicationList = new Bundle();
    configApplicationList.putString("PACKAGE_NAME",getPackageName());
    configApplicationList.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    bMain.putParcelableArray("APP_LIST", new Bundle[]{
            configApplicationList
    });
    /* ###### Associate this application to the profile [Finish] ######*/

    bMain.putString("PROFILE_NAME", "Demo"); //Specify the profile name
    bMain.putString("PROFILE_ENABLED", "true"); //Enable the profile
    bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");
    bMain.putString("RESET_CONFIG", "true");

    Intent iSetConfig = new Intent();

    iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
    iSetConfig.setPackage("com.symbol.datawedge");
    iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
    iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT");
    iSetConfig.putExtra("COMMAND_IDENTIFIER",
            "CREATE_PROFILE");

    this.sendBroadcast(iSetConfig);
}

Set RFID input configuration

private void createProfile() { 
            // Create bundle for profile configuration
    Bundle setConfigBundle = new Bundle();
    setConfigBundle.putString("PROFILE_NAME","SampleConfigApi");
    setConfigBundle.putString("PROFILE_ENABLED", "true");
    setConfigBundle.putString("CONFIG_MODE","CREATE_IF_NOT_EXIST");
    setConfigBundle.putString("RESET_CONFIG", "false");

    // Associate profile with this app
    Bundle appConfig = new Bundle();
    appConfig.putString("PACKAGE_NAME", getPackageName());
    appConfig.putStringArray("ACTIVITY_LIST", new String[]{"*"});
    setConfigBundle.putParcelableArray("APP_LIST", new Bundle[]{appConfig});
    setConfigBundle.remove("PLUGIN_CONFIG");

    // Set RFID configuration
    Bundle rfidConfigParamList  = new Bundle();
    rfidConfigParamList.putString("rfid_input_enabled", "true");
    rfidConfigParamList.putString("rfid_beeper_enable", "true");
    rfidConfigParamList.putString("rfid_led_enable", "true");
    rfidConfigParamList.putString("rfid_antenna_transmit_power", "30");
    rfidConfigParamList.putString("rfid_memory_bank", "2");
    rfidConfigParamList.putString("rfid_session", "1");
    rfidConfigParamList.putString("rfid_trigger_mode", "1");
    rfidConfigParamList.putString("rfid_filter_duplicate_tags", "true");
    rfidConfigParamList.putString("rfid_hardware_trigger_enabled", "true");
    rfidConfigParamList.putString("rfid_tag_read_duration", "250");

            // Pre-filter
    rfidConfigParamList.putString("rfid_pre_filter_enable", "true");
    rfidConfigParamList.putString("rfid_pre_filter_tag_pattern", "3EC");
    rfidConfigParamList.putString("rfid_pre_filter_target", "2");
    rfidConfigParamList.putString("rfid_pre_filter_memory_bank", "2");
    rfidConfigParamList.putString("rfid_pre_filter_offset", "2");
    rfidConfigParamList.putString("rfid_pre_filter_action", "2");

            // Post-filter
    rfidConfigParamList.putString("rfid_post_filter_enable", "true");
    rfidConfigParamList.putString("rfid_post_filter_no_of_tags_to_read", "2");
    rfidConfigParamList.putString("rfid_post_filter_rssi", "-54");

            Bundle rfidConfigBundle = new Bundle();
    rfidConfigBundle.putString("PLUGIN_NAME", "RFID");
    rfidConfigBundle.putString("RESET_CONFIG", "true");
    rfidConfigBundle.putBundle("PARAM_LIST", rfidConfigParamList);

    // Configure intent output for captured data to be sent to this app
    Bundle intentConfig = new Bundle();
    intentConfig.putString("PLUGIN_NAME", "INTENT");
    intentConfig.putString("RESET_CONFIG", "true");
    Bundle intentProps = new Bundle();
    intentProps.putString("intent_output_enabled", "true");
    intentProps.putString("intent_action", "com.zebra.rfid.rwdemo.RWDEMO");
    intentProps.putString("intent_category", "android.intent.category.DEFAULT");
    intentProps.putString("intent_delivery", "0");
    intentConfig.putBundle("PARAM_LIST", intentProps);

            // Add configurations into a collection
    ArrayList<Parcelable> configBundles = new ArrayList<>();
    configBundles.add(rfidConfigBundle);
    configBundles.add(intentConfig);
    setConfigBundle.putParcelableArrayList("PLUGIN_CONFIG", configBundles);

    // Broadcast the intent
    Intent intent = new Intent();
    intent.setAction("com.symbol.datawedge.api.ACTION");
    intent.putExtra("com.symbol.datawedge.api.SET_CONFIG", setConfigBundle);
    sendBroadcast(intent);
} 

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","LAST_RESULT");
// i.putExtra("SEND_RESULT", "true");  // For versions prior to DataWedge 7.1
i.putExtra("com.symbol.datawedge.api.RESULT_CATEGORY", DEFAULT_CATEGORY);
i.putExtra("COMMAND_IDENTIFIER", "DW_SERIAL_COMMAND");

this.sendBroadcast(i);

Set DCP input configuration

//SetConfig [Start]
Bundle bMain = new Bundle();

Bundle bConfigDCP = new Bundle();
Bundle bParamsDCP = new Bundle();
bParamsDCP.putString("dcp_input_enabled", "true");
bParamsDCP.putString("dcp_dock_button_on", "LEFT"); //Supported values: BOTH - Left or Right, LEFT - Left only, RIGHT - Right only
bParamsDCP.putString("dcp_start_in", "FULLSCREEN"); //Supported Values: FULLSCREEN, BUTTON, BUTTON_ONLY
bParamsDCP.putString("dcp_highest_pos", "30"); //Supported Values:  0 - 100, Highest pos can not be greater than lowest pos
bParamsDCP.putString("dcp_lowest_pos", "40"); //Supported Values: 0 - 100, Highest pos can not be greater than lowest pos
bParamsDCP.putString("dcp_drag_detect_time", "501"); //Supported Values: 0 - 1000
bConfigDCP.putString("RESET_CONFIG", "false");
bConfigDCP.putBundle("PARAM_LIST", bParamsDCP);

bMain.putBundle("DCP", bConfigDCP);

bMain.putString("PROFILE_NAME", "Profile007");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();
iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
//SetConfig [End]

this.sendBroadcast(iSetConfig);

Set MSR input configuration

// SetConfig [Start]
Bundle bMain = new Bundle();

Bundle bConfigMSR = new Bundle();
Bundle bParamsMSR = new Bundle();

bParamsMSR.putString("msr_input_enabled", "true");

bConfigMSR.putString("PLUGIN_NAME", "MSR");
bConfigMSR.putString("RESET_CONFIG", "true");
bConfigMSR.putBundle("PARAM_LIST", bParamsMSR);

bMain.putBundle("PLUGIN_CONFIG", bConfigMSR);

bMain.putString("PROFILE_NAME", "Profile007");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();
iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
// SetConfig [End]

this.sendBroadcast(iSetConfig);

Set voice input configuration

public void CreateProfile (View view) {
ArrayList<Bundle> plugins = new ArrayList();

// Configure created profile to apply to this app
Bundle profileConfig = new Bundle();
profileConfig.putString("PROFILE_NAME", EXTRA_PROFILENAME);
profileConfig.putString("PROFILE_ENABLED", "true");
profileConfig.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");  // Create profile if it does not exist

// Associate profile with this app
Bundle appConfig = new Bundle();
appConfig.putString("PACKAGE_NAME", getPackageName());
appConfig.putStringArray("ACTIVITY_LIST", new String[]{"*"});
profileConfig.putParcelableArray("APP_LIST", new Bundle[]{appConfig});

// Configure intent output for captured data to be sent to this app
Bundle intentConfig = new Bundle();
intentConfig.putString("PLUGIN_NAME", "INTENT");
intentConfig.putString("RESET_CONFIG", "true");

Bundle intentProps = new Bundle();
intentProps.putString("intent_output_enabled", "true");
intentProps.putString("intent_action", "com.zebra.datacapture1.ACTION");
intentProps.putString("intent_delivery", "2");
intentConfig.putBundle("PARAM_LIST", intentProps);

plugins.add(intentConfig);

// Add Voice Input Configuration
Bundle voiceConfig = new Bundle();
voiceConfig.putString("PLUGIN_NAME", "VOICE");
voiceConfig.putString("RESET_CONFIG", "false");
Bundle bParams = new Bundle();
bParams.putString("voice_input_enabled", "true");
bParams.putString("voice_data_capture_start_phrase", "hello");
bParams.putString("voice_data_capture_end_phrase", "");
bParams.putString("voice_end_detection_timeout", "3");
bParams.putString("voice_data_type", "1");
bParams.putString("voice_start_phrase_waiting_tone", "true");
bParams.putString("voice_data_capture_waiting_tone", "true");
bParams.putString("voice_validation_window", "true");
bParams.putString("voice_offline_speech", "false");
bParams.putString("voice_data_capture_start_option", "0");
bParams.putString("voice_command_tab_enabled", "true");
bParams.putString("voice_command_tab_phrase", "tab");
bParams.putString("voice_command_enter", "true");
bParams.putString("voice_command_enter_phrase", "enter");
bParams.putString("voice_command_move_next_enabled", "true");
bParams.putString("voice_command_move_next_phrase", "next");
bParams.putString("voice_command_move_previous_enabled", "true");
bParams.putString("voice_command_move_previous_phrase", "previous");
bParams.putString("voice_command_escape_enabled", "true");
bParams.putString("voice_command_escape_phrase", "escape");
bParams.putString("voice_command_clear_enabled", "true");
bParams.putString("voice_command_clear_phrase", "empty");
voiceConfig.putBundle("PARAM_LIST", bParams);

// Add Voice Input plugin Configuration to the plugins list
plugins.add(voiceConfig);

// Add plugins list to the bundle
profileConfig.putParcelableArrayList("PLUGIN_CONFIG", plugins);

// Broadcast the intent.

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

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","LAST_RESULT");
// i.putExtra("SEND_RESULT", "true");  // For versions prior to DataWedge 7.1
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 TOKEN processing

// SetConfig [Start]
Bundle bMain = new Bundle();

Bundle bConfigToken = new Bundle();
Bundle bParamsToken = new Bundle();

bParamsToken.putString("send_tokens_option", "BARCODES_TOKENS"); // Supported Values: DISABLED, TOKENS, BARCODES_TOKENS
bParamsToken.putString("token_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE
bParamsToken.putString("multibarcode_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE

Bundle tokenOrder_manufacturing_date_original = new Bundle();
tokenOrder_manufacturing_date_original.putString("name", "manufacturing_date_original");
tokenOrder_manufacturing_date_original.putString("enabled", "true");

Bundle tokenOrder_expiration_date_original = new Bundle();
tokenOrder_expiration_date_original.putString("name", "expiration_date_original");
tokenOrder_expiration_date_original.putString("enabled", "true");

Bundle tokenOrder_di = new Bundle();
tokenOrder_di.putString("name", "di");
tokenOrder_di.putString("enabled", "true");

Bundle tokenOrder_lot_number = new Bundle();
tokenOrder_lot_number.putString("name", "lot_number");
tokenOrder_lot_number.putString("enabled", "true");


Bundle tokenOrder_serial_number = new Bundle();
tokenOrder_serial_number.putString("name", "serial_number");
tokenOrder_serial_number.putString("enabled", "true");


Bundle tokenOrder_mpho_lot_number = new Bundle();
tokenOrder_mpho_lot_number.putString("name", "mpho_lot_number");
tokenOrder_mpho_lot_number.putString("enabled", "true");


Bundle tokenOrder_donation_id = new Bundle();
tokenOrder_donation_id.putString("name", "donation_id");
tokenOrder_donation_id.putString("enabled", "true");

Bundle tokenOrder_labeler_identification_code = new Bundle();
tokenOrder_labeler_identification_code.putString("name", "labeler_identification_code");
tokenOrder_labeler_identification_code.putString("enabled", "true");


Bundle tokenOrder_product_or_catalog_number = new Bundle();
tokenOrder_product_or_catalog_number.putString("name", "product_or_catalog_number");
tokenOrder_product_or_catalog_number.putString("enabled", "true");

Bundle tokenOrder_unit_of_measure_id = new Bundle();
tokenOrder_unit_of_measure_id.putString("name", "unit_of_measure_id");
tokenOrder_unit_of_measure_id.putString("enabled", "false");

Bundle tokenOrder_quantity = new Bundle();
tokenOrder_quantity.putString("name", "quantity");
tokenOrder_quantity.putString("enabled", "false");


// Specify the token order
ArrayList<Bundle> tokenOrderList = new ArrayList<>();
tokenOrderList.add(tokenOrder_manufacturing_date_original);
tokenOrderList.add(tokenOrder_expiration_date_original);
tokenOrderList.add(tokenOrder_lot_number);
tokenOrderList.add(tokenOrder_di);
tokenOrderList.add(tokenOrder_serial_number);
tokenOrderList.add(tokenOrder_mpho_lot_number);
tokenOrderList.add(tokenOrder_donation_id);
tokenOrderList.add(tokenOrder_labeler_identification_code);
tokenOrderList.add(tokenOrder_product_or_catalog_number);
tokenOrderList.add(tokenOrder_unit_of_measure_id);
tokenOrderList.add(tokenOrder_quantity);


bParamsToken.putParcelableArrayList("token_order", tokenOrderList);


bConfigToken.putString("PLUGIN_NAME", "TOKEN");
bConfigToken.putString("OUTPUT_PLUGIN_NAME", "KEYSTROKE"); // Tokens are supported only in KEYSTROKE and IP plugins only
bConfigToken.putString("RESET_CONFIG", "true");
bConfigToken.putBundle("PARAM_LIST", bParamsToken);

bMain.putBundle("PLUGIN_CONFIG", bConfigToken);

bMain.putString("PROFILE_NAME", "Profile007");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();
iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
// SetConfig [End]

this.sendBroadcast(iSetConfig);

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","LAST_RESULT");
        // i.putExtra("SEND_RESULT", "true");  // For versions prior to DataWedge 7.1
    i.putExtra("COMMAND_IDENTIFIER", "KEYSTROKE_API");
    this.sendBroadcast(i);
}

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

Set IP output

// SetConfig [Start]
Bundle bMain = new Bundle();

Bundle bConfigIPOutput = new Bundle();
Bundle bParamsIPOutput = new Bundle();
bParamsIPOutput.putString("ip_output_enabled", "true");
bParamsIPOutput.putString("ip_output_ip_wedge_enabled", "false");
bParamsIPOutput.putString("ip_output_protocol", "UDP"); //Supported Values: TCP: UDP
bParamsIPOutput.putString("ip_output_address", "192.168.0.1"); //Supported Values : IP Address format
bParamsIPOutput.putString("ip_output_port", "55555"); //Supported Values : 1 - 65535

bConfigIPOutput.putString("PLUGIN_NAME", "IP");
bConfigIPOutput.putString("RESET_CONFIG", "true");
bConfigIPOutput.putBundle("PARAM_LIST", bParamsIPOutput);

ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();
bundlePluginConfig.add(bConfigIPOutput);
bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);


bMain.putString("PROFILE_NAME", "Profile007");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();
iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
// SetConfig [End]

this.sendBroadcast(iSetConfig);

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","LAST_RESULT");
        // i.putExtra("SEND_RESULT", "true");  // For versions prior to DataWedge 7.1
        i.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
    this.sendBroadcast(i);
}

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

Set Component Information for Intent Output

Bundle bMain = new Bundle();

ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();

Bundle bConfigIntent = new Bundle();
Bundle bParamsIntent = new Bundle();
bParamsIntent.putString("intent_output_enabled", "true");
bParamsIntent.putString("intent_action", "com.zebra.myapplication");
bParamsIntent.putString("intent_category", "android.intent.category.DEFAULT");

ArrayList<Bundle> bundleComponentInfo = new ArrayList<Bundle>();

Bundle component0 = new Bundle();
component0.putString("PACKAGE_NAME","com.symbol.test");
component0.putString("SIGNATURE","E22084421EAE1A65EEBCB68D4341FE3C2BB6BEC9D");
bundleComponentInfo.add(component0);

Bundle component1 = new Bundle();
component1.putString("PACKAGE_NAME","com.symbol.testpackage");
component1.putString("SIGNATURE","E22084421EAE1A65EEBCB68D4341FE3C2BB6BEC9");
bundleComponentInfo.add(component1);

Bundle component2 = new Bundle();
component2.putString("PACKAGE_NAME","com.symbol.test");
component2.putString("SIGNATURE","E22084421EAE1A65EEBCB68D4341FE3C2BB6BEC9E");
bundleComponentInfo.add(component2);

bParamsIntent.putParcelableArrayList("intent_component_info", bundleComponentInfo);

bConfigIntent.putString("PLUGIN_NAME", "INTENT");
bConfigIntent.putString("RESET_CONFIG", "true");
bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);

bundlePluginConfig.add(bConfigIntent);
bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);

bMain.putString("PROFILE_NAME", "Profile009");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();

iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "SET_INTENT_OUTPUT");

this.sendBroadcast(iSetConfig);

Get SHA1 of application signature

Retrieve SHA1 hash value of application signature from Component Information for Intent Output:

import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SignatureCheck {

    void main(Context context)
    {
        try {
            Signature[] signatures = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures;
            for (Signature sig : signatures) {
                String sha1Signature = getSHA1(sig.toByteArray());
            }
        }

        catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static String getSHA1(byte[] sig)
    {
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance("SHA1");
        }
        catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        digest.update(sig);
        byte[] hashtext = digest.digest();
        return bytesToHex(hashtext);
    }

    public static String bytesToHex(byte[] bytes)
    {
        final char[] hexArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
                '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char[] hexChars = new char[bytes.length * 2];
        int v;
        for (int j = 0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
}

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","LAST_RESULT");

// i.putExtra("SEND_RESULT", "true"); // For versions prior to DataWedge 7.1 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","LAST_RESULT");
        // i.putExtra("SEND_RESULT", "true");  // For versions prior to DataWedge 7.1
    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
};

Set configuration for multiple modules (full profile) in a single intent

Support started with DataWedge 7.1. Previous DataWedge versions required multiple intent calls to set configuration for multiple modules (plugins, APP_LIST, and Data Capture Plus).

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

        IntentFilter filter = new IntentFilter();
        filter.addAction("com.symbol.datawedge.api.RESULT_ACTION");
        filter.addCategory("android.intent.category.DEFAULT");
        registerReceiver(broadcastReceiver, filter);
        setConfig();
}

public void setConfig() {

        /**
        * Setting configuration for:
        * Intent Output Plugin
        * Barcode Input Plugin
        * MSR input Plugin
        * IP Output Plugin
        * Tokens for IP Output Plugin
        * Application Association
        * DCP (Data Capture Plus)
        */

        // SetConfig [Start]
        Bundle bMain = new Bundle();

        Bundle bConfigIntent = new Bundle();
        Bundle bParamsIntent = new Bundle();
        bParamsIntent.putString("intent_output_enabled", "true");
        bParamsIntent.putString("intent_action", "com.symbol.dwudiusertokens.udi");
        bParamsIntent.putString("intent_category", "zebra.intent.dwudiusertokens.UDI");
        bParamsIntent.putInt("intent_delivery", 5); //Use "0" for Start Activity, "1" for Start Service, "2" for Broadcast, "3" for start foreground service
        bConfigIntent.putString("PLUGIN_NAME", "INTENT");
        bConfigIntent.putString("RESET_CONFIG", "false");
        bConfigIntent.putBundle("PARAM_LIST", bParamsIntent);

        Bundle bConfigSimulScan = new Bundle();
        Bundle bParamsSimulScan = new Bundle();
        bParamsSimulScan.putString("simulscan_input_enabled", "true");
        bParamsSimulScan.putString("simulscan_input_source", "Imager"); //Supported values: Camera, Imager, Default
        bParamsSimulScan.putString("simulscan_region_separator", "TAB"); //Supported Values:None, TAB, CR, LF, NONE
        bParamsSimulScan.putString("simulscan_log_dir", "/storage/zebra/intent/");
        bParamsSimulScan.putString("simulscan_enable_timestamp", "true");

        Bundle templateParamsBundle = new Bundle();
        templateParamsBundle.putString("dynamic_quantity", "99");
        bParamsSimulScan.putString("simulscan_template", "UserDefinedQuantity.xml"); // Ex:  UserDefinedQuantity.xml, Default - BankCheck.xml, Default - Barcode 1.xml, Default - Barcode 10.xml, Default - Barcode 2.xml, Default - Barcode 4.xml, Default - Barcode 5.xml, Default - BookNumber.xml, Default - DocCap + Optional Barcode.xml, Default - DocCap + Required Barcode.xml, Default - TravelDoc.xml, Default - Unstructured Multi-Line.xml, Default - Unstructured Single Line.xml
        bParamsSimulScan.putBundle("simulscan_template_params",templateParamsBundle);

        bConfigSimulScan.putString("PLUGIN_NAME", "SIMULSCAN");
        bConfigSimulScan.putString("RESET_CONFIG", "false");
        bConfigSimulScan.putBundle("PARAM_LIST", bParamsSimulScan);

        Bundle bConfigBarcode = new Bundle();
        Bundle bParamsBarcode = new Bundle();
        bParamsBarcode.putString("scanner_selection","auto");
        bParamsBarcode.putString("scanner_input_enabled","true");
        bConfigBarcode.putString("PLUGIN_NAME", "BARCODE");
        bConfigBarcode.putString("RESET_CONFIG", "false");
        bConfigBarcode.putBundle("PARAM_LIST", bParamsBarcode);

        Bundle bConfigMSR = new Bundle();
        Bundle bParamsMSR = new Bundle();
        bParamsMSR.putString("msr_input_enabled", "true");
        bConfigMSR.putString("PLUGIN_NAME", "MSR");
        bConfigMSR.putString("RESET_CONFIG", "false");
        bConfigMSR.putBundle("PARAM_LIST", bParamsMSR);

        Bundle bConfigIPOutput = new Bundle();
        Bundle bParamsIPOutput = new Bundle();
        bParamsIPOutput.putString("ip_output_enabled", "true");
        bParamsIPOutput.putString("ip_output_ip_wedge_enabled", "false");
        bParamsIPOutput.putString("ip_output_protocol", "UDP"); //Supported Values: TCP: UDP
        bParamsIPOutput.putString("ip_output_address", "192.168.0.1"); //Supported Values : IP Address format
        bParamsIPOutput.putString("ip_output_port", "55555"); //Supported Values : 1 - 65535

        bConfigIPOutput.putString("PLUGIN_NAME", "IP");
        bConfigIPOutput.putString("RESET_CONFIG", "false");
        bConfigIPOutput.putBundle("PARAM_LIST", bParamsIPOutput);

        Bundle bConfigToken = new Bundle();
        Bundle bParamsToken = new Bundle();

        bParamsToken.putString("send_tokens_option", "BARCODES_TOKENS"); // Supported Values: DISABLED, TOKENS, BARCODES_TOKENS
        bParamsToken.putString("token_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE
        bParamsToken.putString("multibarcode_separator", "LF"); //Supported Values:None, TAB, CR, LF, NONE

        Bundle tokenOrder_manufacturing_date_original = new Bundle();
        tokenOrder_manufacturing_date_original.putString("name","manufacturing_date_original");
        tokenOrder_manufacturing_date_original.putString("enabled","true");

        Bundle tokenOrder_expiration_date_original = new Bundle();
        tokenOrder_expiration_date_original.putString("name","expiration_date_original");
        tokenOrder_expiration_date_original.putString("enabled","true");

        Bundle tokenOrder_di = new Bundle();
        tokenOrder_di.putString("name","di");
        tokenOrder_di.putString("enabled","true");

        Bundle tokenOrder_lot_number = new Bundle();
        tokenOrder_lot_number.putString("name","lot_number");
        tokenOrder_lot_number.putString("enabled","true");

        Bundle tokenOrder_serial_number = new Bundle();
        tokenOrder_serial_number.putString("name","serial_number");
        tokenOrder_serial_number.putString("enabled","true");

        Bundle tokenOrder_mpho_lot_number = new Bundle();
        tokenOrder_mpho_lot_number.putString("name","mpho_lot_number");
        tokenOrder_mpho_lot_number.putString("enabled","true");

        Bundle tokenOrder_donation_id = new Bundle();
        tokenOrder_donation_id.putString("name","donation_id");
        tokenOrder_donation_id.putString("enabled","true");

        Bundle tokenOrder_labeler_identification_code = new Bundle();
        tokenOrder_labeler_identification_code.putString("name","labeler_identification_code");
        tokenOrder_labeler_identification_code.putString("enabled","true");

        Bundle tokenOrder_product_or_catalog_number = new Bundle();
        tokenOrder_product_or_catalog_number.putString("name","product_or_catalog_number");
        tokenOrder_product_or_catalog_number.putString("enabled","true");

        Bundle tokenOrder_unit_of_measure_id = new Bundle();
        tokenOrder_unit_of_measure_id.putString("name","unit_of_measure_id");
        tokenOrder_unit_of_measure_id.putString("enabled","true");

        Bundle tokenOrder_quantity = new Bundle();
        tokenOrder_quantity.putString("name","quantity");
        tokenOrder_quantity.putString("enabled","false");

        ArrayList<Bundle> tokenOrderList = new ArrayList<>();
        tokenOrderList.add(tokenOrder_manufacturing_date_original);
        tokenOrderList.add(tokenOrder_expiration_date_original);
        tokenOrderList.add(tokenOrder_lot_number);
        tokenOrderList.add(tokenOrder_di);
        tokenOrderList.add(tokenOrder_serial_number);
        tokenOrderList.add(tokenOrder_mpho_lot_number);
        tokenOrderList.add(tokenOrder_donation_id);
        tokenOrderList.add(tokenOrder_labeler_identification_code);
        tokenOrderList.add(tokenOrder_product_or_catalog_number);
        tokenOrderList.add(tokenOrder_unit_of_measure_id);
        tokenOrderList.add(tokenOrder_quantity);

        bParamsToken.putParcelableArrayList("token_order", tokenOrderList);

        bConfigToken.putString("PLUGIN_NAME", "TOKEN");
        bConfigToken.putString("OUTPUT_PLUGIN_NAME","IP");
        bConfigToken.putString("RESET_CONFIG", "true");
        bConfigToken.putBundle("PARAM_LIST", bParamsToken);

        ArrayList<Bundle> bundlePluginConfig = new ArrayList<>();
        bundlePluginConfig.add(bConfigIntent);
        bundlePluginConfig.add(bConfigBarcode);
        bundlePluginConfig.add(bConfigSimulScan);
        bundlePluginConfig.add(bConfigMSR);
        bundlePluginConfig.add(bConfigIPOutput);
        bundlePluginConfig.add(bConfigToken);

        bMain.putParcelableArrayList("PLUGIN_CONFIG", bundlePluginConfig);

        //AppList[Start]
        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", "com.symbol.pubudu");
        bundleApp3.putStringArray("ACTIVITY_LIST", new String[]{"*"});

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

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

        // AppList [End]

        Bundle bConfigDCP = new Bundle();
        Bundle bParamsDCP = new Bundle();
        bParamsDCP.putString("dcp_input_enabled", "true");
        bParamsDCP.putString("dcp_dock_button_on", "LEFT"); //Supported values: BOTH - Left or Right, LEFT - Left only, RIGHT - Right only
        bParamsDCP.putString("dcp_start_in", "FULLSCREEN"); //Supported Values: FULLSCREEN, BUTTON, BUTTON_ONLY
        bParamsDCP.putString("dcp_highest_pos", "10"); //Supported Values:  0 - 100
        bParamsDCP.putString("dcp_lowest_pos", "20"); //Supported Values: 0 - 100
        bParamsDCP.putString("dcp_drag_detect_time", "501"); //Supported Values: 0 - 1000
        bConfigDCP.putString("RESET_CONFIG", "true");
        bConfigDCP.putBundle("PARAM_LIST", bParamsDCP);

        bMain.putBundle("DCP", bConfigDCP);

        bMain.putString("PROFILE_NAME", "Profile007");
        bMain.putString("PROFILE_ENABLED", "true");
        bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

        Intent iSetConfig = new Intent();
        iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
        iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
        iSetConfig.putExtra("SEND_RESULT", "COMPLETE_RESULT"); //Supported values: NONE, LAST_RESULT, COMPLETE_RESULT
        iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
        //SetConfig [End]

        this.sendBroadcast(iSetConfig);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                String strFinalResult = "";
                String command = intent.getStringExtra("COMMAND");
                String profileName = intent.getStringExtra("PROFILE_NAME");
                String resultInfo = "";

                if (action.equals("com.symbol.datawedge.api.RESULT_ACTION")) {

                        if (intent.hasExtra("RESULT_LIST")) { // returns for COMPLETE_RESULT
                                resultInfo += "ProfileName: " + profileName + "\n";
                                ArrayList<Bundle> result_list = (ArrayList)intent.getSerializableExtra("RESULT_LIST");
                                for (Bundle bundleResult : result_list) {

                                        resultInfo +="\n\n";

                                        Set<String> keys = bundleResult.keySet();
                                        for (String key : keys) {
                                                String val = bundleResult.getString(key);
                                                if (val == null) {

                                                        if (bundleResult.getStringArray(key) != null) {
                                                                val = "";
                                                                for (String s : bundleResult.getStringArray(key)) {
                                                                        val += "" + s + "\n";
                                                                }
                                                        }
                                                }

                                                resultInfo += key + ": " + val + "\n";
                                        }
                                }
                        }

                        if (command != null) {
                                if (command.equalsIgnoreCase("com.symbol.datawedge.api.SET_CONFIG")) {
                                        Log.d("TAG", "#IntentApp# \n\nSetConfig status received:\nResultInfo: \n" + resultInfo);
                                }
                        }
                }
        }
};

Set global scanner configuration

Bundle bConfig = new Bundle();
bConfig.putString("PLUGIN_NAME","BARCODE");

Bundle bParams = new Bundle();
bParams.putString("scanner_input_enabled", "true");
bParams.putString("configure_all_scanners", "true"); // configure for all scanners
bConfig.putBundle("PARAM_LIST", bParams);

Set presentation mode

// MAIN BUNDLE PROPERTIES
Bundle bMain = new Bundle();
bMain.putString("PROFILE_NAME", "Profile1");
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", "BARCODE");
bConfig.putString("RESET_CONFIG", "true");

// PARAM_LIST BUNDLE PROPERTIES
Bundle bParams = new Bundle();

bParams.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER");
bParams.putString("scanner_input_enabled" , "true");
bParams.putString("aim_type", "4"); // presentation mode
bParams.putString("scene_detect_qualifier ", "0"); // 0- None and 1- Proximity Sensor Input

…

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);

Character Set Configuration

// MAIN BUNDLE PROPERTIES
Bundle bMain = new Bundle();
bMain.putString("PROFILE_NAME", "ProfileCharSet");
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", "BARCODE");
bConfig.putString("RESET_CONFIG", "true");

// PARAM_LIST BUNDLE PROPERTIES
Bundle bParams = new Bundle();
bParams.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER");
bParams.putString("charset_name", "AUTO");
bParams.putString("auto_charset_preferred_order", "GB2312;UTF-8");
bParams.putString("auto_charset_failure_option", "UTF-8");

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 Enterprise Keyboard Configuration

//SetConfig [Start] Bundle bMain = new Bundle(); Bundle bConfigEKB = new Bundle();

Bundle bParamsEKB = new Bundle();
bParamsEKB.putString("ekb_enabled", "true"); // Supported values: true/false
Bundle layoutParams = new Bundle();
layoutParams.putString("layout_group", "EKBCustomLayouts");
layoutParams.putString("layout_name", "qwerty");
bParamsEKB.putBundle("ekb_layout", layoutParams);
//bParamsEKB.putBundle("ekb_layout", null); // To set to default

bConfigEKB.putString("RESET_CONFIG", "false");
bConfigEKB.putBundle("PARAM_LIST", bParamsEKB);

bMain.putBundle("EKB", bConfigEKB);

bMain.putString("PROFILE_NAME", "ZebraEKB");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Intent iSetConfig = new Intent();
iSetConfig.setAction("com.symbol.datawedge.api.ACTION");
iSetConfig.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
iSetConfig.putExtra("SEND_RESULT", "LAST_RESULT");
iSetConfig.putExtra("COMMAND_IDENTIFIER", "INTENT_API");
//SetConfig [End]

this.sendBroadcast(iSetConfig);

Set Multi-Scanner Mode

Set and configure multi-scanner mode. The scanner parameter list is extended to support multiple configurations by passing an ArrayList to it. With single scanner support, a Bundle data type is passed as the scanner parameter list.

Bundle bMain = new Bundle();
bMain.putString("PROFILE_NAME", "Profile009");
bMain.putString("PROFILE_ENABLED", "true");
bMain.putString("CONFIG_MODE", "CREATE_IF_NOT_EXIST");

Bundle bConfig = new Bundle();
bConfig.putString("PLUGIN_NAME","BARCODE");
bConfig.putString("RESET_CONFIG","true");
bConfig.putString("SCANNER_INPUT_ENABLED","true");

//LEFT, RIGHT, CENTER, GUN, PROXIMITY
//AUTO,INTERNAL_IMAGER,INTERNAL_LASER,INTERNAL_CAMERA,SERIAL_SSI,BLUETOOTH_SSI,BLUETOOTH_RS6000,BLUETOOTH_DS2278,BLUETOOTH_DS3678,PLUGABLE_SSI,PLUGABLE_SSI_RS5000,USB_SSI_DS3608
Bundle scanner1Params = new Bundle();
scanner1Params.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER");
scanner1Params.putStringArray("scanner_trigger_resource", new String[]{"LEFT", "RIGHT"}); //Required triggers
scanner1Params.putString("decoder_code11", "true");
scanner1Params.putString("decoder_code39", "false");
scanner1Params.putString("picklist", "1");

Bundle scanner2Params = new Bundle();
scanner2Params.putString("scanner_selection_by_identifier", "BLUETOOTH_RS6000");
scanner2Params.putStringArray("scanner_trigger_resource", new String[]{"CENTER"}); //Required triggers
scanner2Params.putString("decoder_code11", "true");
scanner2Params.putString("decoder_code128", "false");
scanner2Params.putString("picklist", "2");

ArrayList<Bundle> scannerParamList = new ArrayList<>();
scannerParamList.add(scanner1Params);
scannerParamList.add(scanner2Params);

bConfig.putParcelableArrayList("PARAM_LIST", scannerParamList);

bMain.putBundle("PLUGIN_CONFIG", bConfig); //true, false
Intent i = new Intent();
i.setAction("com.symbol.datawedge.api.ACTION");
i.putExtra("com.symbol.datawedge.api.SET_CONFIG", bMain);
i.putExtra("SEND_RESULT","LAST_RESULT");
i.putExtra("COMMAND_IDENTIFIER", "SET_CONFIG");
this.sendBroadcast(i);

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