Skip to main content

Barcode Scan

The Docutain SDK comes with integrated, ready to use UI components for the barcode scan process.

BarcodeUI


Supported Barcode Formats

  • code128
  • code39
  • code93
  • codabar
  • ean13
  • ean8
  • itf
  • upca
  • upce
  • qr
  • pdf417
  • aztec
  • datamatrix

Initialize

Initialize the Docutain SDK as described here.

Camera Permission

Declare the following permission in your AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
info

Runtime permission for camera is handled automatically by the Docutain SDK.

Start the barcode scanner

To start the barcode scan process you only have to launch an ActivityResultLauncher with our predefined BarcodeScanResultContract contract and wait for it to return.

import de.docutain.sdk.barcode.contracts.BarcodeScanResultContract

val barcodeScanResultLauncher = registerForActivityResult(BarcodeScanResultContract()) { barcode ->
if (barcode != null) {
//user finished scan process, continue with your workflow
//val value = barcode.displayValue
//val format = barcode.format
//...
} else {
//user canceled scan process
}
}

myButton.setOnClickListener {
val scanConfig = BarcodeScannerConfiguration()
barcodeScanResultLauncher.launch(scanConfig)
}

An instance of BarcodeScannerConfiguration is required to launch the barcode scanner. It provides the possibility to change some behaviours to adopt it to your needs.

val scanConfig = BarcodeScannerConfiguration()
scanConfig.vibrateOnSuccess = false //defaults to true
scanConfig.beepOnSuccess = true //defaults to false
scanConfig.codeFormats = listOf(BarcodeFormat.CODE_39, BarcodeFormat.DATA_MATRIX) //defaults to all supported barcode formats
//more configs available
tip

If you need to scan only specific barcode formats, you can improve the barcode scan performance by defining the barcode formats by setting scanConfig.codeFormats like in the example above.

info

All parameters in BarcodeScannerConfiguration are optional.