B4A Library Honeywell Mobility device barcode reader library - Data Collection V1.97.00.0084

Hello everyone,
Here is a library that I wrapped for using with Honeywell Mobility mobile computers (barcode readers). This library uses the official Honeywell Data Collection Java API V1.97.00.0084.

Obviously you don't need a library to view data from 1D/2D (QR) scan engines, you can just use an intent via a B4A Receiver Module. This library allows you to add more functionality to your Honeywell barcode reader apps.

The original Honeywell library for Android Studio only has a hand full of methods exposed just to get their barcode readers up and running. After reading the Honeywell SDK documentation, I decided to create a new more enhanced library for B4A, thus the name.

Take note:
This library does not work with normal mobile phones built-in cameras, it's for Honeywell Mobility Android devices that are compatible with Data Collector V1.97.00.0084. Look at the supported mobile computers list further down this post, or the more comprehensive list in post #2.

B4A library tab
1756479063570.png


Important:
There are 3 separate files in the attached library zip file, place all 3 files in your B4A additional libraries folder.

B4A test app screenshot:
Screenshot_20250830-193013.png


1756480909549.png

I have created a more comprehensive Honeywell compatible devices list in post #2 below. Look for your device in that list. If your Honeywell device is not listed below, you can still try testing this library on your Honeywell device.

SS_HoneywellMobilityEnhanced

Author:
Peter Simpson
Version: 1.01
  • HoneywellMobilityEnhanced
    B4A SDK Wrapper for Honeywell Barcode Scanner (Aidc SDK)
    Based on Android Data Collection Java API V1.97.00.0084
    • Events:
      • BarcodeScanned (Data As String)
      • OnFailureEvent (Message As String)
      • OnGuidanceFeedback (Message As String)
      • OnImageCaptured (Image() As Byte)
      • OnImageCaptureFailed (Message As String)
      • ScannerConnectionChanged (IsConnected As Boolean)
      • ScannerStatusChanged (Status As String)
      • ScannerUnavailable (Message As String)
      • TriggerChanged (Pressed As Boolean)
    • Functions:
      • CaptureLastScannedImage
        Captures and returns the last scanned bitmap image.
        This method raises the OnImageCaptured event with the captured image
        or OnImageCaptureFailed if the capture is unsuccessful.
      • ClaimScanner
        Claims control of the barcode reader, allowing the application to use it.
        This is automatically handled internally but can be called manually if needed.
      • EnableLogging (enabled As Boolean)
        Enables or disables library logging for debugging purposes.
        Enabled true to enable logging, false to disable.
      • GetAllProperties As Map
        Retrieves a Map of all properties currently set on the BarcodeReader.
        You must have a BarcodeReader instance that is claimed and available.
        Return A Map containing all properties, or an empty Map on error.
      • GetBarcodeReaderInfo As Map
        This method retrieves information about the last connected barcode reader and returns it as a B4A Map.
        Create and initialize a new B4A Map object to store the scanner's properties.
      • GetConnectedScannerName As String
        Gets the friendly name of the currently connected barcode scanner.
        Returns the scanner's name as a string, or an empty string if none is connected.
      • GetConnectionStatus As String
        Retrieves a formatted connection status of the barcode scanner as an integer,
        Mapping the raw SDK values to a standard convention.
        Return Connected if the scanner is connected, Disconnected if disconnected, or Unknown if the status is unknown.
      • GetProperty (propertyName As String) As Object
        Retrieves the value of a single scanner property.
        e.g. "PROPERTY_EAN_13_ENABLED", "PROPERTY_DECODER_TIMEOUT", "PROPERTY_ILLUMINATION_MODE".
        CHECK THE SCANNER MANUAL FOR THE FULL LIST OF PROPERTIES
        propertyName: The name of the property to retrieve.
        Return the value of the property as an Object, or null if the property
        is not found or an error occurs.
      • GetScanHistory As String()
        Retrieves the history of scanned barcodes.
        An array of strings containing the last 50
        history of scanned barcodes.
      • GetScannerFirmwareVersion As String
        Retrieves the scanner's firmware version.
        The firmware version as a string, or null if not available.
      • GetScannerId As String
        Retrieves the scanner ID as a string, or null if not available.
      • GetScannerSerialNumber As String
        Retrieves the serial number as a string, or null if not available.
      • GetSymbologyStates As List
        Retrieves the state (enabled/disabled) of a list of common symbologies.
        This function gets all current properties from the scanner and checks
        the state of a predefined list of common symbologies.
        A List of strings where each element is a symbology name followed by its state,
        e.g. "Code 128: Enabled". Returns an empty list if the scanner is not ready.
      • Initialize (EventName As String)
        Initializes the Honeywell Mobility library for barcode scanners.
        This will automatically claims a barcode scanner if one is availiable.
      • IsClaimed As Boolean
        Checks if the barcode reader is currently claimed by this application.
        Returns true if the scanner is claimes, false otherwise.
      • IsInitialized As Boolean
        Checks if the AIDC manager is fully initialized and able to communicate with the device.
        This is a more robust check than simply verifying the aidcManager object is not null.
        True if the AIDC manager is ready for use, false otherwise.
      • IsScannerReady As Boolean
        Checks if the scanner is ready for use, including being connected and available.
        This is a more robust check than simply verifying the barcodeReader object is not null.
        True if the scanner is ready for use, false otherwise.
      • ListAvailableScanners As List
        Return a list of friendly names for all available barcode scanners.
      • ListScanners As List
        Lists all connected barcode scanners and returns a list of their names.
        These are the technical names used by the SDK and are required for the
        `createBarcodeReaderConnection` method. For user interface purposes,
        use the `ListAvailableScanners` method instead.
        The `BarcodeReaderInfo.getName()` is used to get the technical name
        which is a unique identifier for a scanner.
        The `BarcodeReaderInfo.getFriendlyName()` is used to get the user-friendly name,
        like "Internal Imager" or "RS31 Ring Scanner".
        Returns a list of strings containing the technical names of connected scanners.
      • Notify (NotificationType As String)
        Triggers a pre-configured notification for the user.
        You must have a BarcodeReader instance that is claimed and available.
        NotificationType The type of notification to trigger.
        Accepted values are: "GOOD_READ_NOTIFICATION" or "BAD_READ_NOTIFICATION".
      • onPause
        Releases the scanner claim when the application is paused.
      • onResume
        Reclaims the scanner when the application resumes from the background.
      • ReleaseScanner
        Releases the barcode reader, allowing other applications to claim it.
      • ResetScannerToDefaults
        Resets the barcode scanner's properties to their default values.
      • SelectScannerByFriendlyName (FriendlyName As String)
        Selects a specific barcode scanner to use by its friendly name.
        The friendly name of the scanner to select.
      • SetAimerEnabled (Enabled As Boolean)
        Enables or disables the scanner aimer.
        This function uses the ACTION_CONTROL_SCANNER intent.
        True to turn on the aimer, False to turn it off.
      • SetBadReadNotification (Enabled As Boolean)
        Enables or disables the bad read notification sound/vibration.
        True to enable, False to disable.
      • SetDecoderTimeout (timeout As Int)
        Sets the maximum time (in milliseconds) the scanner will attempt to decode a barcode.
        The timeout value in milliseconds.
      • SetEventPrefix (Prefix As String)
        Sets a custom event prefix for the library's events.
        Change the prefix initialize event name string to a new prefix event name string.
      • SetGoodReadNotification (Enabled As Boolean)
        Enables or disables the good read notification sound/vibration.
        True to enable, False to disable.
      • SetIlluminationEnabled (Enabled As Boolean)
        Enables or disables the scanner illumination.
        True to turn on the illumination, False to turn it off.
      • SetProperty (propertyName As String, propertyValue As Object)
        Gets the value of a single scanner property,
        e.g. "PROPERTY_EAN_13_ENABLED", "PROPERTY_DECODER_TIMEOUT", "PROPERTY_ILLUMINATION_MODE".
        CHECK THE SCANNER MANUAL FOR THE FULL LIST OF PROPERTIES

        propertyName: The name of the property to retrieve.
        Return the value of the property, or null if the property
        is not found or an error occurs.
      • SetSoftwareTriggerState (state As Boolean)
        Programmatically triggers the scanner.
        True to start a scan, False to stop it.
      • SetTriggerScanMode (Mode As String)
        Sets the scan mode of the trigger.
        This allows you to configure whether the scanner performs a one-shot scan or
        scans continuously while the trigger is held down.
        The desired scan mode as a string.
        Accepted values are: "continuous", "oneShot", "readOnRelease".
      • StartScan
        Initiates a software trigger to start a scan.
      • StopScan
        Stops the software trigger, ending an active scan.
A list of my barcode reader properties that this library generated using the GetAllProperties method.

DEC_MAXICODE_MAX_LENGTH: 150
DEC_OCR_MODE: off
DEC_COMPOSITE_MIN_LENGTH: 1
DEC_RSS_EXPANDED_MIN_LENGTH: 1
DEC_MSI_MIN_LENGTH: 4
DEC_VIDEO_REVERSE_ENABLED: normal
DEC_M25_MIN_LENGTH: 4
IMG_UPLOAD_BAD_READ_IMAGE: false
DEC_RSS_EXPANDED_ENABLED: false
IMG_TARGET_PERCENTILE: 97
TRIG_SCAN_SAME_SYMBOL_TIMEOUT_ENABLED: false
DPR_LAUNCH_BROWSER: false
DEC_DOTCODE_MAX_LENGTH: 2400
DEC_GS1_128_MAX_LENGTH: 80
DEC_UPCA_CHECK_DIGIT_TRANSMIT: false
DEC_CODE11_ENABLED: false
IMG_EXPOSURE: 4800
DEC_EAN8_ADDENDA_SEPARATOR: false
DEC_WINDOW_BOTTOM: 50
DEC_MAXICODE_ENABLED: false
TRIG_SCAN_DELAY: 0
DEC_RSS_EXPANDED_MAX_LENGTH: 74
DEC_POSTNET_CHECK_DIGIT_TRANSMIT: false
DEC_DIGIMARC_CONVERSION: convertToEquivalent
DEC_KOREA_POST_MIN_LENGTH: 4
DPR_DATA_INTENT: false
DEC_UPCA_ADDENDA_SEPARATOR: false
DEC_CODE39_START_STOP_TRANSMIT: false
DEC_UPCE0_ENABLED: true
DEC_CODE39_MIN_LENGTH: 0
DEC_DATAMATRIX_ENABLED: true
DEC_RSS_LIMITED_ENABLED: false
DEC_IATA25_MIN_LENGTH: 4
DEC_TELEPEN_MIN_LENGTH: 1
DEC_EAN8_ENABLED: true
DEC_IATA25_ENABLED: false
DEC_MICROPDF_ENABLED: false
DEC_HANXIN_MAX_LENGTH: 7833
IMG_GAIN: 1024
IMG_UPLOAD_QUOTA_SIZE: 300
IMG_UPLOAD_FOLDER_MAX_SIZE: 90
DEC_AZTEC_ENABLED: false
DEC_CODE11_CHECK_DIGIT_MODE: doubleDigitCheckAndStrip
DEC_OCR_ACTIVE_TEMPLATES: 1
DPR_DATA_INTENT_ACTION:
DEC_EAN8_5CHAR_ADDENDA_ENABLED: false
DEC_S25_MIN_LENGTH: 4
DEC_COMPOSITE_WITH_UPC_ENABLED: false
DEC_ID_PROP_USE_ROI: Disable
DEC_UPCE_NUMBER_SYSTEM_TRANSMIT: true
DEC_CODE39_MAX_LENGTH: 10
DEC_COMBINE_COMPOSITES: false
DEC_ADD_SEARCH_TIME_UPC_COMPOSITE: 300
DEC_GS1_128_ENABLED: true
DEC_PDF417_MIN_LENGTH: 1
DEC_UPCA_NUMBER_SYSTEM_TRANSMIT: true
DEC_M25_MAX_LENGTH: 80
DEC_C128_SHORT_MARGIN: partial
DEC_I25_MAX_LENGTH: 80
DEC_UPCA_TRANSLATE_TO_EAN13: false
DEC_TRIOPTIC_ENABLED: false
DEC_DATAMATRIX_MAX_LENGTH: 3116
TRIG_ENABLE: true
DEC_CODABLOCK_A_ENABLED: false
DEC_CODE93_HIGH_DENSITY: false
DEC_HANXIN_ENABLED: false
DEC_COUPON_CODE_MODE: false
DEC_GRIDMATRIX_ENABLED: false
DEC_COMPOSITE_MAX_LENGTH: 2435
DEC_CODE93_MIN_LENGTH: 0
DEC_OCR_TEMPLATE: 1,3,7,7,7,7,7,7,7,7,0
DEC_UPCE_EXPAND: false
DEC_CODE39_UNCONV_INTER_CHAR: false
DEC_DPM_ENABLED: none
DEC_EAN13_ENABLED: false
DEC_DIGIMARC_ENABLED: false
DEC_GRIDMATRIX_MAX_LENGTH: 2751
DEC_MAXICODE_MIN_LENGTH: 1
NTF_GOOD_READ_ENABLED: true
DEC_DOTCODE_ENABLED: false
DEC_PDF417_ENABLED: false
DEC_MSI_MAX_LENGTH: 48
DEC_DECODE_SET:
DEC_CODE128_MIN_LENGTH: 0
DEC_MSI_CHECK_DIGIT_MODE: noCheck
DEC_C128_ISBT_ENABLED: false
NTF_BAD_READ_ENABLED: true
DEC_CODABLOCK_A_MAX_LENGTH: 2048
DEC_COMPOSITE_ENABLED: false
DEC_GRIDMATRIX_MIN_LENGTH: 1
DEC_EAN13_CHECK_DIGIT_TRANSMIT: false
DEC_QR_MIN_LENGTH: 1
DEC_UPCE_5CHAR_ADDENDA_ENABLED: false
DEC_CODABLOCK_F_MAX_LENGTH: 2048
DEC_DOTCODE_MIN_LENGTH: 1
DEC_WINDOW_MODE: true
DEC_CODABAR_START_STOP_TRANSMIT: false
TRIG_SCAN_SAME_SYMBOL_TIMEOUT: 1000
DEC_EAN13_2CHAR_ADDENDA_ENABLED: false
DEC_S25_ENABLED: false
IMG_TARGET_ACCEPTABLE_OFFSET: 40
DEC_UPCE_ADDENDA_REQUIRED: false
DEC_EAN8_CHECK_DIGIT_TRANSMIT: false
DPR_CHARSET: ISO-8859-1
IMG_TARGET_VALUE: 100
DEC_CODABAR_MAX_LENGTH: 60
IMG_EXPOSURE_MODE: contextSensitive
DEC_MICROPDF_MIN_LENGTH: 1
IMG_OVERRIDE_RECOMMENDED_VALUES: false
DPR_WEDGE_KEY_CHARS: 9,10,13
DEC_CODABLOCK_F_ENABLED: false
DEC_UPCA_5CHAR_ADDENDA_ENABLED: false
DEC_QR_ENABLED: true
DEC_PROP_MSIP_OUT_OF_SPEC_SYMBOL: false
DPR_WEDGE: false
DEC_EAN13_ADDENDA_REQUIRED: false
DEC_UPCE1_ENABLED: false
DEC_CODABAR_CONCAT_ENABLED: false
DEC_UPCE_CHECK_DIGIT_TRANSMIT: false
DEC_TELEPEN_OLD_STYLE: false
DEC_CODE39_ENABLED: true
DEC_UPCE_2CHAR_ADDENDA_ENABLED: false
NTF_VIBRATE_ENABLED: false
DPR_PREFIX:
DEC_I25_CHECK_DIGIT_MODE: noCheck
IMG_SAMPLE_METHOD: centerWeighted
DEC_KOREA_POST_ENABLED: false
DEC_HK25_MAX_LENGTH: 80
DEC_CODABAR_CHECK_DIGIT_MODE: noCheck
DEC_COMBINE_COUPON_CODES: false
DEC_EAN13_ADDENDA_SEPARATOR: false
IMG_ILLUM_INTENSITY: 100
DEC_AZTEC_MIN_LENGTH: 1
DEC_DIGIMARC_SHAPE_DETECTION: false
DPR_EDIT_DATA_SETTINGS:
DEC_DIGIMARC_SCALE_BLOCKS: useBothScale1AndScale3Blocks
DEC_CODE93_ENABLED: false
DEC_CODE39_BASE32_ENABLED: false
DEC_MICROPDF_MAX_LENGTH: 366
DEC_CODABAR_MIN_LENGTH: 2
DEC_MSIP_SHORT_MARGIN: false
DEC_IATA25_MAX_LENGTH: 64
DEC_DECODE_FILTER_DEBUG: 0
DEC_RSS_14_ENABLED: false
DEC_CODE39_CHECK_DIGIT_MODE: noCheck
IMG_AUTO_CALIBRATION: true
DEC_I25_ENABLED: false
DEC_GS1_128_MIN_LENGTH: 0
DPR_DATA_INTENT_PACKAGE_NAME:
DEC_PLANETCODE_CHECK_DIGIT_TRANSMIT: false
DEC_CODE93_MAX_LENGTH: 80
DPR_SCAN_TO_INTENT: true
DEC_EAN13_5CHAR_ADDENDA_ENABLED: false
DEC_S25_MAX_LENGTH: 48
DEC_M25_ENABLED: false
DEC_PDF417_MAX_LENGTH: 2750
DEC_HK25_MIN_LENGTH: 4
DEC_I25_MIN_LENGTH: 2
DEC_UPCE_ADDENDA_SEPARATOR: false
DEC_KOREA_POST_MAX_LENGTH: 48
DEC_SECURITY_LEVEL: 2
DPR_WEDGE_METHOD: standard
DEC_POSTAL_ENABLED: none
DEC_CODE39_FULL_ASCII_ENABLED: false
IMG_MAX_EXPOSURE: 60000
DEC_WINDOW_LEFT: 50
DEC_UPCA_ADDENDA_REQUIRED: false
DEC_CODE11_MIN_LENGTH: 1
DEC_DATAMATRIX_MIN_LENGTH: 1
DEC_CODE128_ENABLED: true
DEC_CODABLOCK_A_MIN_LENGTH: 1
DPR_DATA_INTENT_CLASS_NAME:
DPR_EDIT_DATA_PLUGIN:
DEC_UPCA_2CHAR_ADDENDA_ENABLED: false
DEC_WINDOW_TOP: 50
DPR_SYMBOLOGY_PREFIX: none
DEC_CODE128_MAX_LENGTH: 80
DEC_CODABLOCK_F_MIN_LENGTH: 1
DEC_CODABAR_ENABLED: false
DEC_EAN8_2CHAR_ADDENDA_ENABLED: false
DEC_HANXIN_MIN_LENGTH: 1
DEC_TLC39_ENABLED: false
DEC_LINEAR_DAMAGE_IMPROVEMENTS: false
TRIG_AUTO_MODE_TIMEOUT: 20
DEC_DECODE_FILTER:
DEC_UPCA_ENABLE: true
DEC_WINDOW_RIGHT: 50
DPR_SUFFIX:
IMG_UPLOAD_GOOD_READ_IMAGE: false
DPR_LAUNCH_EZ_CONFIG: true
DEC_QR_MAX_LENGTH: 7089
DEC_EAN8_ADDENDA_REQUIRED: false
DEC_CODE11_MAX_LENGTH: 80
DPR_DATA_INTENT_CATEGORY:
TRIG_CONTROL_MODE: autoControl
IMG_REJECTION_LIMIT: 5
DEC_AZTEC_MAX_LENGTH: 3832
DEC_TELEPEN_ENABLED: false
IMG_MAX_GAIN: 1024
DEC_TELEPEN_MAX_LENGTH: 60
DEC_HK25_ENABLED: false
DEC_MSI_ENABLED: false
TRIG_SCAN_MODE: oneShot

Take note:
This library will ONLY DISPLAY PROPERTIES that are available on your device.

Update: V1.01
  • Updated some of the previous library methods
  • Removed a couple of test methods
  • Updated the test app (attached)

D = 7+7


Enjoy...
 

Attachments

  • HoneywellMobility.zip
    19.6 KB · Views: 11
  • HoneywellMobilityLib.zip
    137.5 KB · Views: 12
Last edited:

Peter Simpson

Expert
Licensed User
Longtime User
Hello everyone,
Here's a list of Honeywell Android devices that are said to be compatible with the library above.

Honeywell does not appear to provide a complete or definitive list of compatible devices. The list below was compiled from Honeywell’s official documentation as well as community sources, including GitHub, Reddit, and other forums where users confirmed that certain devices function correctly despite not being included in Honeywell’s official compatibility list.

Honeywell Mobile Computer Compatibility
Barcode readers 1D/2D (QR)

Mobile ComputerLatest Android VersionCompatibility
Mobility Edge Platform
CK65 Handheld ComputerAndroid 12Fully Compatible
CK67 Ultra-Rugged Mobile ComputerAndroid 14Fully Compatible
CN80 Handheld ComputerAndroid 9Fully Compatible
CN80G Handheld ComputerAndroid 11 (R)Fully Compatible
CT30 XP Mobile ComputerAndroid 13Fully Compatible
CT32 Mobile ComputerAndroid 14Fully Compatible
CT37 Handheld TerminalAndroid 14Fully Compatible
CT40 Handheld ComputerAndroid 11 (R)Fully Compatible
CT40 XP Handheld ComputerAndroid 11 (R)Fully Compatible
CT45 / CT45 XP Mobile ComputerAndroid 14Fully Compatible
CT47 Mobile ComputerAndroid 12Fully Compatible
CT60 Handheld ComputerAndroid 9Fully Compatible
CT60 XP Handheld ComputerAndroid 11Fully Compatible
CW45 Wearable ComputerAndroid 12Fully Compatible
RT10A Mobile ComputerAndroid 9Fully Compatible
Thor VM1A Vehicle-Mounted ComputerAndroid 11 (R)Fully Compatible
Thor VM3A Vehicle-Mounted ComputerAndroid 11 (R)Fully Compatible
Legacy Devices
Dolphin 75eAndroid 6.0 (Marshmallow)Limited / Older SDK Versions
CN51Android 6.0 (Marshmallow)Limited / Older SDK Versions
CK75, CN75, CN75eAndroid 6.0 (Marshmallow)Limited / Older SDK Versions
ScanPal EDA50 Handheld ComputerAndroid 7.1.1 (Nougat)Limited / Older SDK Versions
ScanPal EDA50K Handheld ComputerAndroid 7.1.1 (Nougat)Limited / Older SDK Versions
ScanPal EDA51 Handheld ComputerAndroid 10Limited / Older SDK Versions
ScanPal EDA51K Handheld ComputerAndroid 10Limited / Older SDK Versions
ScanPal EDA52 Mobile ComputerAndroid 11Fully Compatible
ScanPal EDA5S Mobile ComputerAndroid 11Fully Compatible
ScanPal EDA56 Mobile ComputerAndroid 11Fully Compatible
ScanPal EDA61K Mobile ComputerAndroid 10Limited / Older SDK Versions
ScanPal EDA70 Handheld ComputerAndroid 8.1 (Oreo)Limited / Older SDK Versions
ScanPal EDA71 Enterprise TabletAndroid 10Limited / Older SDK Versions

* The letter K at the end of some models, denotes that the device has a built-in hardware keyboard (keyed).

The list above is not set in stone. You can test your official Android powered Honeywell device using the library in post #1. If it works, let us know by posting about it below.

The Honeywell line of Android mobile computers (barcode readers), many of which are built on their "Mobility Edge" platform, are compatible with the Mobility SDK for Android which is what the B4A library is based on.

The specific compatibility can depend on the Android OS version on the device.


Enjoy...
 
Last edited:

amorosik

Expert
Licensed User
I also tested this library on a Honeywell EDA52 (Android 11) and it works fine
Congratulations on your work, which you generously shared, and many thanks.
 
Top