diff --git a/programming/android/api-reference/auxiliary-DataMatrixDetails.md b/programming/android/api-reference/auxiliary-DataMatrixDetails.md
index e930c624..abf56ec9 100644
--- a/programming/android/api-reference/auxiliary-DataMatrixDetails.md
+++ b/programming/android/api-reference/auxiliary-DataMatrixDetails.md
@@ -10,7 +10,7 @@ breadcrumbText: DataMatrixDetails
# DataMatrixDetails
-`DataMatrixDetails` extends the [`DSBarcodeDetails`](barcode-details.md) class and represents detailed information about a Data Matrix barcode.
+`DataMatrixDetails` extends the [`BarcodeDetails`](barcode-details.md) class and represents detailed information about a Data Matrix barcode.
## Definition
diff --git a/programming/android/api-reference/auxiliary-ExtendedResult.md b/programming/android/api-reference/auxiliary-ExtendedResult.md
index c100a079..97e0c062 100644
--- a/programming/android/api-reference/auxiliary-ExtendedResult.md
+++ b/programming/android/api-reference/auxiliary-ExtendedResult.md
@@ -56,8 +56,8 @@ The following methods are inherited from class [`RegionObjectElement`]({{ site.d
| Method | Description |
| ------ | ----------- |
-| [`getLocation`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#getlocation) | Gets the location of the region object, represented as a [`Quadrilateral`](../basic-structures/quadrilateral.md). |
-| [`setLocation`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#setlocation) | Sets the location of the region object, represented as a [`Quadrilateral`](../basic-structures/quadrilateral.md). |
+| [`getLocation`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#getlocation) | Gets the location of the region object, represented as a [`Quadrilateral`]({{ site.dcvb_android_api }}core/basic-structures/quadrilateral.html). |
+| [`setLocation`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#setlocation) | Sets the location of the region object, represented as a [`Quadrilateral`]({{ site.dcvb_android_api }}core/basic-structures/quadrilateral.html). |
| [`getReferencedElement`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#getreferencedelement) | Gets the referenced element that supports the capturing of this element. |
| [`getRegionObjectElementType`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html#getregionobjectelementtype) | The type of the region object element, defined by the enumeration `EnumRegionObjectElementType`. |
diff --git a/programming/android/api-reference/barcode-scanner/barcode-scan-result.md b/programming/android/api-reference/barcode-scanner/barcode-scan-result.md
index bc733a5a..5db3aaf7 100644
--- a/programming/android/api-reference/barcode-scanner/barcode-scan-result.md
+++ b/programming/android/api-reference/barcode-scanner/barcode-scan-result.md
@@ -26,14 +26,14 @@ class BarcodeScanResult
| Method | Description |
| ------ | ----------- |
-| [`getBarcodes`](#getbarcodes) | Returns an array of [`BarcodeResultItem`]({{ site.dbr_android_api }}barcode-result-item.html), which represents a single barocde result. |
+| [`getBarcodes`](#getbarcodes) | Returns an array of [`BarcodeResultItem`]({{ site.dbr_android_api }}barcode-result-item.html), which represents a single barcode result. |
| [`getResultStatus`](#getresultstatus) | Returns the status of the `BarcodeScanResult`, which can indicate success or failure. |
| [`getErrorCode`](#geterrorcode) | Returns the error code should something go wrong during the barcode recognition process. |
| [`getErrorString`](#geterrorstring) | Returns the error message associated with the error code should something go wrong during the barcode recognition process. |
### getBarcodes
-Returns an array of [`BarcodeResultItem`]({{ site.dbr_android_api }}barcode-result-item.html), which represents a single barocde result and is the most basic unit of the captured results.
+Returns an array of [`BarcodeResultItem`]({{ site.dbr_android_api }}barcode-result-item.html), which represents a single barcode result and is the most basic unit of the captured results.
```java
BarcodeResultItem[] getBarcodes();
diff --git a/programming/android/api-reference/barcode-scanner/enum-scanning-mode.md b/programming/android/api-reference/barcode-scanner/enum-scanning-mode.md
index 9624864a..a6009806 100644
--- a/programming/android/api-reference/barcode-scanner/enum-scanning-mode.md
+++ b/programming/android/api-reference/barcode-scanner/enum-scanning-mode.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: EnumScanningMode - Dynamsoft Barcode Reader Android Edition
-description: EnumScanningMode of Dynamsoft Barcode Reader Android is an enumeration class that defines the result status of the BarcodeScanResult.
+description: EnumScanningMode of Dynamsoft Barcode Reader Android is an enumeration class that defines the scanning mode.
keywords: scan modes, scanning modes, single, multiple barcodes
needAutoGenerateSidebar: true
needGenerateH3Content: true
@@ -10,9 +10,7 @@ breadcrumbText: EnumScanningMode
# EnumScanningMode
-`EnumScanningMode` is an enumeration class that defines the scanning mode.
-
-If the status is **finished**, that indicates that the result has been decoded and is available - while **canceled** indicates that the operation has been halted. If the result status is **exception**, then that means that an error has occurred during the barcode detection process.
+`EnumScanningMode` is an enumeration class that defines the scanning mode. Currently, it is use for switching between single-barcode and multi-barcode scanning modes.
## Definition
diff --git a/programming/android/api-reference/barcode-scanner/index.md b/programming/android/api-reference/barcode-scanner/index.md
index bcc56b88..69f8e335 100644
--- a/programming/android/api-reference/barcode-scanner/index.md
+++ b/programming/android/api-reference/barcode-scanner/index.md
@@ -16,5 +16,10 @@ keywords: BarcodeScanner, api reference, Android
| [`BarcodeScannerActivity`](barcode-scanner-activity.md) | The main class of `BarcodeScanner`. It is an activity class that implements barcode decoding features. |
| [`BarcodeScannerConfig`](barcode-scanner-config.md) | The class that provides barcode scanning configurations. |
| [`BarcodeScanResult`](barcode-scan-result.md) | The result class. |
+
+## Enumerations
+
+| Enumeration | Description |
+| ----------- | ----------- |
| [`EnumResultStatus`](enum-result-status.md) | An enumeration class that describes the result status. |
| [`EnumScanningMode`](enum-scanning-mode.md) | An enumeration class that describes the scanning mode. |
diff --git a/programming/android/api-reference/dbr-index.md b/programming/android/api-reference/dbr-index.md
index d78e32cf..f3cbcf50 100644
--- a/programming/android/api-reference/dbr-index.md
+++ b/programming/android/api-reference/dbr-index.md
@@ -9,45 +9,37 @@ keywords: BarcodeReader, api reference, Android
`DynamsoftBarcodeReader` library mainly provides barcode decoding algorithms. It includes APIs for you to obtain the barcode results and configure the decoding settings.
-## Namespace
-
-### com.dynamsoft.dbr
-
-#### APIs for General Usage
-
+- Settings
+ - [SimplifiedBarcodeReaderSettings]({{ site.dbr_android_api }}simplified-barcode-reader-settings.html): Configure the barcode decoding settings.
- Resulting Classes
- - Captured Result Classes
- - [BarcodeResultItem]({{ site.dbr_android_api }}barcode-result-item.html): The basic item that represents the decoding result of a single barcode.
+ - Basic Barcode Results
- [DecodedBarcodesResult]({{ site.dbr_android_api }}decoded-barcodes-result.html): All barcode decoding results that extracted from a single image.
- - Setting Configuration Classes
- - [SimplifiedBarcodeReaderSettings]({{ site.dbr_android_api }}simplified-barcode-reader-settings.html): Configure the barcode decoding settings.
+ - [BarcodeResultItem]({{ site.dbr_android_api }}barcode-result-item.html): The basic item that represents the decoding result of a single barcode.
+ - Barcode Details
+ - [AztecDetails]({{ site.dbr_android_api }}auxiliary-AztecDetails.html)
+ - [BarcodeDetails]({{ site.dbr_android_api }}barcode-details.html)
+ - [DataMatrixDetails]({{ site.dbr_android_api }}auxiliary-DatamatrixDetails.html)
+ - [OneDCodeDetails]({{ site.dbr_android_api }}auxiliary-OneDCodeDetails.html)
+ - [PDF417Details]({{ site.dbr_android_api }}auxiliary-PDF417Details.html)
+ - [QRCodeDetails]({{ site.dbr_android_api }}auxiliary-QRCodeDetails.html)
+ - Intermediate Result Classes
+ - [CandidateBarcodeZonesUnit]({{ site.dbr_android_api }}candidate-barcode-zones-unit.html)
+ - [CandidateBarcodeZone]({{ site.dbr_android_api }}candidate-barcode-zone.html)
+ - [ComplementedBarcodeImageUnit]({{ site.dbr_android_api }}complemented-barcode-image-unit.html)
+ - [DecodedBarcodeElement]({{ site.dbr_android_api }}decoded-barcode-element.html)
+ - [DecodedBarcodesUnit]({{ site.dbr_android_api }}decoded-barcodes-unit.html)
+ - [DeformationResistedBarcodeImageUnit]({{ site.dbr_android_api }}deformation-resisted-barcode-image-unit.html)
+ - [DeformationResistedBarcode]({{ site.dbr_android_api }}deformation-resisted-barcode.html)
+ - [ECISegment]({{ site.dbr_android_api }}eci-segment.html)
+ - [ExtendedBarcodeResult]({{ site.dbr_android_api }}auxiliary-ExtendedResult.html)
+ - [LocalizedBarcodesElement]({{ site.dbr_android_api }}localized-barcode-element.html)
+ - [LocalizedBarcodesUnit]({{ site.dbr_android_api }}localized-barcodes-unit.html)
+ - [ScaledUpBarcodeImageUnit]({{ site.dbr_android_api }}scaled-up-barcode-image-unit.html)
- Auxiliary Classes
- [BarcodeReaderModule]({{ site.dbr_android_api }}barcode-reader-module.html)
- Enumerations
- - [BarcodeFormat]({{ site.dbr_android_api }}enum/barcode-format.html?lang=android)
- - [DeblurMode]({{ site.dbr_android_api }}enum/deblur-mode.html?lang=android)
- - [ExtendedBarcodeResultType]({{ site.dbr_android_api }}enum/extended-barcode-result-type.html?lang=android)
- - [LocalizationMode]({{ site.dbr_android_api }}enum/localization-mode.html?lang=android)
- - [QRCodeErrorCorrectionLevel]({{ site.dbr_android_api }}enum/qr-code-error-correction-level.html?lang=android)
-
-#### APIs for Advanced Usage
-
-- Barcode Details
- - [AztecDetails]({{ site.dbr_android_api }}auxiliary-AztecDetails.html)
- - [BarcodeDetails]({{ site.dbr_android_api }}barcode-details.html)
- - [DataMatrixDetails]({{ site.dbr_android_api }}auxiliary-DatamatrixDetails.html)
- - [OneDCodeDetails]({{ site.dbr_android_api }}auxiliary-OneDCodeDetails.html)
- - [PDF417Details]({{ site.dbr_android_api }}auxiliary-PDF417Details.html)
- - [QRCodeDetails]({{ site.dbr_android_api }}auxiliary-QRCodeDetails.html)
-- Intermediate Result Classes
- - [CandidateBarcodeZonesUnit]({{ site.dbr_android_api }}candidate-barcode-zones-unit.html)
- - [CandidateBarcodeZone]({{ site.dbr_android_api }}candidate-barcode-zone.html)
- - [ComplementedBarcodeImageUnit]({{ site.dbr_android_api }}complemented-barcode-image-unit.html)
- - [DecodedBarcodeElement]({{ site.dbr_android_api }}decoded-barcode-element.html)
- - [DecodedBarcodesUnit]({{ site.dbr_android_api }}decoded-barcodes-unit.html)
- - [DeformationResistedBarcodeImageUnit]({{ site.dbr_android_api }}deformation-resisted-barcode-image-unit.html)
- - [DeformationResistedBarcode]({{ site.dbr_android_api }}deformation-resisted-barcode.html)
- - [ExtendedBarcodeResult]({{ site.dbr_android_api }}extended-barcode-result.html)
- - [LocalizedBarcodesElement]({{ site.dbr_android_api }}localized-barcode-element.html)
- - [LocalizedBarcodesUnit]({{ site.dbr_android_api }}localized-barcodes-unit.html)
- - [ScaledUpBarcodeImageUnit]({{ site.dbr_android_api }}scaled-up-barcode-image-unit.html)
+ - [BarcodeFormat]({{ site.dbr_android_api }}enum/barcode-format.html)
+ - [DeblurMode]({{ site.dbr_android_api }}enum/deblur-mode.html)
+ - [ExtendedBarcodeResultType]({{ site.dbr_android_api }}enum/extended-barcode-result-type.html)
+ - [LocalizationMode]({{ site.dbr_android_api }}enum/localization-mode.html)
+ - [QRCodeErrorCorrectionLevel]({{ site.dbr_android_api }}enum/qr-code-error-correction-level.html)
diff --git a/programming/android/api-reference/decoded-barcode-element.md b/programming/android/api-reference/decoded-barcode-element.md
index cc3d5751..5fcfd704 100644
--- a/programming/android/api-reference/decoded-barcode-element.md
+++ b/programming/android/api-reference/decoded-barcode-element.md
@@ -42,6 +42,7 @@ class DecodedBarcodeElement extends RegionObjectElement
| [`getDetails`](#getdetails) | Returns the `BarcodeDetails` of the decoded barcode. |
| [`getExtendedBarcodeResults`](#getextendedbarcoderesults) | Returns the extended barcode results of the decoded barcode. |
| [`setLocation`](#setlocation) | Sets the location of the decoded barcode. |
+| [`getECISegments`](#getecisegments) | Returns the ECI segments of the decoded barcode. |
The following methods are inherited from [`RegionObjectElement`]({{ site.dcvb_android_api }}core/intermediate-results/region-object-element.html).
@@ -242,3 +243,15 @@ int setLocation(Quadrilateral location);
**Return Value**
Returns 0 if it succeeds. Otherwise, returns an error code.
+
+### getECISegments
+
+Returns the ECI segments of the decoded barcode.
+
+```java
+ECISegment[] getECISegments();
+```
+
+**Return Value**
+
+An array of [`ECISegment`](eci-segment.md) objects representing the ECI segments of the decoded barcode.
diff --git a/programming/android/api-reference/decoded-barcodes-result.md b/programming/android/api-reference/decoded-barcodes-result.md
index dceb66e2..4d091a8d 100644
--- a/programming/android/api-reference/decoded-barcodes-result.md
+++ b/programming/android/api-reference/decoded-barcodes-result.md
@@ -34,7 +34,7 @@ The following methods are inherited from [`CapturedResultBase`]({{ site.dcvb_and
| Method | Description |
| ------ | ----------- |
| [`getOriginalImageHashId`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#getoriginalimagehashid) | Gets the hash id of the original image. |
-| [`getOriginalImageTag`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#getoriginalimagetag) | Gets the [ImageTag](image-tag.md) of the original image. |
+| [`getOriginalImageTag`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#getoriginalimagetag) | Gets the [ImageTag]({{ site.dcvb_android_api }}core/basic-structures/image-tag.html) of the original image. |
| [`getRotationTransformMatrix`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#getrotationtransformmatrix) | Gets the rotation transformation matrix of the original image relative to the rotated image. |
| [`getErrorCode`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#geterrorcode) | Gets the error code of this result. |
| [`getErrorMessage`]({{ site.dcvb_android_api }}core/basic-structures/captured-result-base.html#geterrormessage) | Gets the error message of this result. |
diff --git a/programming/android/api-reference/enum/barcode-format.md b/programming/android/api-reference/enum/barcode-format.md
index e5ae91a9..1ff63ef9 100644
--- a/programming/android/api-reference/enum/barcode-format.md
+++ b/programming/android/api-reference/enum/barcode-format.md
@@ -72,9 +72,9 @@ public @interface EnumBarcodeFormat {
/**Code 11.*/
public static final long BF_CODE_11 = 1L << 21;
/**Decode barcode with 2 digital addons.*/
- public static final long BF_TWO_DIGIT_ADD_ON = 1L << 22,
+ public static final long BF_TWO_DIGIT_ADD_ON = 1L << 22;
/**Decode barcode with 5 digital addons.*/
- public static final long BF_FIVE_DIGIT_ADD_ON = 1L << 23,
+ public static final long BF_FIVE_DIGIT_ADD_ON = 1L << 23;
/**Code 32*/
public static final long BF_CODE_32 = 1L << 24;
/**PDF417 barcode.*/
diff --git a/programming/android/api-reference/enum/deblur-mode.md b/programming/android/api-reference/enum/deblur-mode.md
index 4a9fe7c7..dbda096f 100644
--- a/programming/android/api-reference/enum/deblur-mode.md
+++ b/programming/android/api-reference/enum/deblur-mode.md
@@ -40,7 +40,7 @@ public @interface EnumDeblurMode {
/**Reserved setting for deblur mode.*/
public static final int DM_REV = -2147483648;
/**Skips the deblur process.*/
- public static final int DM_SKIP = 0x00
+ public static final int DM_SKIP = 0x00;
/**Placeholder value with no functional meaning.*/
public static final int DM_END=0xFFFFFFFF;
}
diff --git a/programming/android/api-reference/index.md b/programming/android/api-reference/index.md
index df3cb2bc..8d2b2f4e 100644
--- a/programming/android/api-reference/index.md
+++ b/programming/android/api-reference/index.md
@@ -1,62 +1,122 @@
---
layout: default-layout
title: Dynamsoft Barcode Reader Android API Reference - Main Page
-description: This is the main page of Dynamsoft Barcode Reader SDK API Reference for Android Language.
+description: Main API reference page for Dynamsoft Barcode Reader SDK for Android.
keywords: BarcodeReader, api reference, Android
+noTitleIndex: false
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
---
-# SDK Overview: Modules and Main APIs
+# API Overview
+
+Dynamsoft Barcode Reader (DBR) SDK is built on the Dynamsoft Capture Vision (DCV) architecture.
+
+
+
-This page provides an overview of the various modules and highlights the most essential APIs that form the backbone of Dynamsoft Barcode Reader SDK.
-
-## Modules Summary
-
-The Dynamsoft Barcode Reader (DBR) SDK is built on the Dynamsoft Capture Vision (DCV) framework, which includes multiple modules working together to achieve barcode reading. The hierarchical structure diagram below illustrates the various modules of the DBR SDK (with modules at the top depending on those below).
-
-
-
-
Module hierarchy of the DBR SDK
-
+## Main APIs
-The table below describes the functionalities of these modules:
+| Category | Library | Description |
+| -------- | ------- | ----------- |
+| Orchestration | DynamsoftCaptureVisionRouter | Core Capture Vision Router APIs for configuring settings, starting or stopping capture, and registering receivers. |
+| Input & UI Enhancement | DynamsoftCameraEnhancer | APIs for camera control, image enhancement, and camera UI. |
+| Functional Modules | DynamsoftBarcodeReader DynamsoftCodeParser | APIs for functional modules, mainly for decoded results and result processing. |
+| Infrastructure & Utility | DynamsoftLicense DynamsoftCore DynamsoftUtility | Licensing, basic structures, intermediate results, and utility APIs. |
-| Module | Description |
-|:-------|:------------|
-| `DynamsoftBarcodeReader`(DBR) | The Dynamsoft Barcode Reader module recognizes and decodes multiple barcode formats such as QR codes, Code 39, Code 128, and Data Matrix, among many others. |
-| `DynamsoftCore`(Core) | The Dynamsoft Core module lays the foundation for Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. It encapsulates the basic classes, interfaces, and enumerations shared by these SDKs. |
-| `DynamsoftCaptureVisionRouter`(CVR) | The Dynamsoft Capture Vision Router module is the cornerstone of the Dynamsoft Capture Vision (DCV) architecture. It focuses on coordinating batch image processing and provides APIs for setting up image sources and result receivers, configuring workflows with parameters, and controlling processes. |
-| `DynamsoftImageProcessing`(DIP) | The Dynamsoft Image Processing module facilitates digital image processing and supports operations for other modules, including the Barcode Reader, Label Recognizer, and Document Normalizer. |
-| `DynamsoftLicense`(License) | The Dynamsoft License module manages the licensing aspects of Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. |
-| `DynamsoftCameraEnhancer`(DCE) | The Dynamsoft Camera Enhancer module controls the camera, transforming it into an image source for the DCV (Dynamsoft Capture Vision) architecture through ISA implementation. It also enhances image quality during acquisition and provides basic viewers for user interaction. |
-| `DynamsoftUtility`(Utility) | The Dynamsoft Utility module defines auxiliary classes, including the ImageManager, and implementations of the CRF (Captured Result Filter) and ISA (Image Source Adapter) . These are shared by all Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. |
-| `DynamsoftCodeParser`(DCP) | The Dynamsoft Code Parser module converts data strings, typically encrypted in barcodes and machine-readable zones, into human-readable information. |
-| `DynamsoftCodeParserDedicator`(DCPD) | The Dynamsoft Code Parser Dedicator module provides auxiliary functionality to enhance and extend the capabilities of DCP module. |
+### CaptureVisionRouter
-## Main APIs
+The main class [`CaptureVisionRouter`]({{ site.dcvb_android_api }}capture-vision-router/capture-vision-router.html) acts as the SDK entry point and provides the following essential APIs:
-### Capture Vision Router
+#### Configure Settings
-The main class [`CaptureVisionRouter`]({{ site.dcvb_android_api }}capture-vision-router/capture-vision-router.html) acts as the SDK entry point and provides the following essential APIs:
+| API | Description |
+| --- | ----------- |
+| [`initSettingsFromFile`]({{ site.dcvb_android_api }}capture-vision-router/settings.html#initsettingsfromfile) | Load settings from a custom template file. |
+| [`SimplifiedCaptureVisionSettings`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html) | Access commonly used settings through a `SimplifiedCaptureVisionSettings` object. |
-- [Set input]({{ site.dcvb_android_api }}capture-vision-router/multiple-file-processing.html#setinput)
-- [Config barcode reader settings]({{ site.dcvb_android_api }}capture-vision-router/settings.html)
-- [Add result receiver]({{ site.dcvb_android_api }}capture-vision-router/multiple-file-processing.html#addresultreceiver)
-- [Start video stream barcode processing]({{ site.dcvb_android_api }}capture-vision-router/multiple-file-processing.html#startcapturing)
+#### Start/Stop Capture
-### Image Source Adapter
+| API | Description |
+| --- | ----------- |
+| [`startCapturing`]({{ site.dcvb_android_api }}capture-vision-router/multiple-file-processing.html#startcapturing) | Start processing input frames with the selected template. |
+| [`stopCapturing`]({{ site.dcvb_android_api }}capture-vision-router/multiple-file-processing.html#stopcapturing) | Stop the current capture process. |
-The [`ImageSourceAdapter`]({{ site.dcvb_android_api }}core/basic-structures/image-source-adapter.html) class is an abstract class representing an adapter for image sources, providing a framework for fetching, buffering, and managing images from various sources. It serves as the input for the [`CaptureVisionRouter`]({{ site.dcvb_android_api }}capture-vision-router/capture-vision-router.html). You can either use the typical implementations of [`ImageSourceAdapter`]({{ site.dcvb_android_api }}core/basic-structures/image-source-adapter.html) or implement your own.
+#### Receive Results
-Class [`CameraEnhancer`]({{ site.dce_android }}primary-api/camera-enhancer.html) is one of the typical implementations of [`ImageSourceAdapter`]({{ site.dcvb_android_api }}core/basic-structures/image-source-adapter.html). It is a class that not only implements the video frame obtaining APIs but also enables you to improve the video quality by adjusting the camera settings.
+Implement [`CapturedResultReceiver`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) to receive capture results.
-### Captured Result Receiver
+| API | Description |
+| --- | ----------- |
+| [`onDecodedBarcodesReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived) | Callback for receiving barcode decoding results as a [`DecodedBarcodesResult`](decoded-barcodes-result.md) object. |
+| [`onParsedResultReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#onparsedresultreceived) | Callback for receiving parsed results as a [`ParsedResult`]({{ site.dcp_android_api }}parsed-result.html) object. |
+| [`onCapturedResultReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#oncapturedresultreceived) | Callback for receiving all result types as a [`CapturedResult`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result.html) object. |
-To receive the results of video streaming barcode decoding, you need to implement the [`CapturedResultReceiver`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) with the callback method [`onDecodedBarcodesReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived). The result you received in the callback method is a [`DecodedBarcodesResult`](decoded-barcodes-result.md) object, which contains all the decoded barcodes from the processed video frame.
+### Input - CameraEnhancer
-- [`onDecodedBarcodesReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived): The callback method for you to receive the barcode decoding results with a [`DecodedBarcodesResult`](decoded-barcodes-result.md) object.
-- [`DecodedBarcodesResult`](decoded-barcodes-result.md): An object that contains all the [`BarcodeResultItem`](barcode-result-item.md) obtained from a video frame.
-- [`BarcodeResultItem`](barcode-result-item.md): The basic item that represents a single barcode with the decoded text and other information.
+[`CameraEnhancer`]({{ site.dce_android }}primary-api/camera-enhancer.html) is a built-in implementation of [`ImageSourceAdapter`]({{ site.dcvb_android_api }}core/basic-structures/image-source-adapter.html). It combines camera control, image enhancement, and a UI system designed for the Dynamsoft Capture Vision architecture.
-### Camera View
+### Result
-[`CameraView`]({{ site.dce_android }}auxiliary-api/dcecameraview.html) is a view class that is designed for visualizing real-time video streaming and the barcode decoding result. If the [`CameraEnhancer`]({{ site.dce_android }}primary-api/camera-enhancer.html) is set as the input of your CVR, the decoded barcodes will be highlighted automatically on the [`CameraView`]({{ site.dce_android }}auxiliary-api/dcecameraview.html).
+| Result | Basic Item | Type |
+| ------ | ---------- | ---- |
+| [`DecodedBarcodesResult`](decoded-barcodes-result.md) | [`BarcodeResultItem`](barcode-result-item.md) | `CRIT_BARCODE` |
+| [`ParsedResult`]({{ site.dcp_android_api }}parsed-result.html) | [`ParsedResultItem`]({{ site.dcp_android_api }}parsed-result-item.html) | `CRIT_PARSED_RESULT` |
diff --git a/programming/android/api-reference/simplified-barcode-reader-settings.md b/programming/android/api-reference/simplified-barcode-reader-settings.md
index bb4cd69c..c7a1add3 100644
--- a/programming/android/api-reference/simplified-barcode-reader-settings.md
+++ b/programming/android/api-reference/simplified-barcode-reader-settings.md
@@ -144,7 +144,7 @@ To learn more about reading inverted barcodes, please view this article on [how
### grayscaleEnhancementModes
-Sets which grayscale enhancement mode(s) the library will use when reading barcodes. The array consists of [GrayscaleEnhancementModes]({{site.dcvb_enumerations}}core/grayscale-enhancement-mode.html?lang=objc,swift).
+Sets which grayscale enhancement mode(s) the library will use when reading barcodes. The array consists of [GrayscaleEnhancementModes]({{site.dcvb_enumerations}}core/grayscale-enhancement-mode.html?lang=android).
```java
int[] grayscaleEnhancementModes;
diff --git a/programming/android/foundational-guide.md b/programming/android/foundational-guide.md
index 1df8e3b4..46562b8a 100644
--- a/programming/android/foundational-guide.md
+++ b/programming/android/foundational-guide.md
@@ -1,14 +1,14 @@
---
layout: default-layout
-title: User Guide - Dynamsoft Barcode Reader for Android
-description: This is the user guide of Dynamsoft Barcode Reader for Android SDK.
+title: User Guide - Dynamsoft Barcode Reader Android
+description: This is the user guide of Dynamsoft Barcode Reader Android SDK.
keywords: user guide, android
needAutoGenerateSidebar: true
needGenerateH3Content: true
noTitleIndex: true
---
-# Build Your App with Foundational APIs
+# Full-Feature Development
## Requirements
@@ -70,13 +70,13 @@ There are two ways to add the libraries into your project - **Manually** and **M
>1.
```groovy
dependencies {
- implementation 'com.dynamsoft:barcodereaderbundle:11.4.3000'
+ implementation 'com.dynamsoft:barcodereaderbundle:11.6.1000'
}
```
2.
```kotlin
dependencies {
- implementation("com.dynamsoft:barcodereaderbundle:11.4.3000")
+ implementation("com.dynamsoft:barcodereaderbundle:11.6.1000")
}
```
@@ -524,24 +524,8 @@ From this page, you have learned how to create a simple video barcode decoding a
### Explore Features
-If you want to explore the many features of the SDK and learn how to use them to best process the images you read in your application, read the articles in [Explore Features](user-guide/explore-features/index.md).
-
-### Check Use Cases
-
-If you want to check how the SDK works in popular use cases, read the articles in [Use Cases](user-guide/use-cases/index.md).
+If you want to explore the many features of the SDK and learn how to use them to best process the images you read in your application, read the articles in [Explore Features](user-guide/capabilities/index.html).
### Using CameraX with DBR
If you use the Android CameraX SDK, [DecodeWithCameraX sample](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/DecodeWithCameraX){:target="_blank"} will guide you on how to add barcode scanning to your app.
-
-### Other platforms
-
-- [Getting Started with iOS](https://www.dynamsoft.com/barcode-reader/docs/mobile/programming/objectivec-swift/?ver=latest){:target="_blank"}
-- [Getting Started with MAUI](https://www.dynamsoft.com/capture-vision/docs/programming/maui/?ver=latest){:target="_blank"}
-- [Getting Started with React Native](https://www.dynamsoft.com/capture-vision/docs/programming/react-native/?ver=latest){:target="_blank"}
-- [Getting Started with Flutter](https://www.dynamsoft.com/capture-vision/docs/programming/flutter/?ver=latest){:target="_blank"}
-- [Getting Started with C++]({{ site.dbr_cpp }}){:target="_blank"}
-- [Getting Started with Python]({{ site.dbr_python }}){:target="_blank"}
-- [Getting Started with Java]({{ site.dbr_java }}){:target="_blank"}
-- [Getting Started with .NET]({{ site.dbr_dotnet }}){:target="_blank"}
-- [Getting Started with JS]({{ site.dbr_js }}){:target="_blank"}
\ No newline at end of file
diff --git a/programming/android/index.md b/programming/android/index.md
index 1abbac2f..6ccb36d8 100644
--- a/programming/android/index.md
+++ b/programming/android/index.md
@@ -1,7 +1,7 @@
---
layout: default-layout
-title: Main Page - Dynamsoft Barcode Reader for Android
-description: This is the main page of Dynamsoft Barcode Reader for Android SDK.
+title: Main Page - Dynamsoft Barcode Reader Android
+description: This is the main page of Dynamsoft Barcode Reader Android SDK.
keywords: android
needAutoGenerateSidebar: true
needGenerateH3Content: true
@@ -10,69 +10,100 @@ breadcrumbText: Android
# Dynamsoft Barcode Reader Android Edition
-Dynamsoft Barcode Reader (DBR) SDK Android Edition is a barcode reading tool designed specifically for Android developers.
-
-You can either get a quick start with the [BarcodeScanner APIs](api-reference/barcode-scanner/index.md) or experience a highly customizable development with the [foundational APIs](api-reference/index.md). Furthermore, DBR provides a powerful [parameter]({{ site.dcvb_parameters}}file/index.html?lang=android) system in order to cope with various scenarios.
-
-| | Develop with BarcodeScanner APIs | Develop with Foundational APIs |
-| -- | ------------------------------ | ------------------------------ |
-| Lines of Code | 15+ lines | 60+ lines |
-| UI | Preset | Fully customizable |
-| Decode from Live Video | ✔ | ✔ |
-| Decode from an Image | X | ✔ |
-| Performance Customization | ✔ | ✔ |
-| Camera Control | Limited | ✔ |
-| Intermediate Results | X | ✔ |
-
-## Develop with BarcodeScanner APIs
-
-`BarcodeScanner` is a component with the following features:
-
-- Minimal Code: High-level APIs achieve full functionality with one line of code.
-- Ready-to-Use UI: Pre-integrated components and UI enable quick setup.
-- Common Customization: Configuration objects simplify typical algorithm and UI setups.
-
-`BarcodeScanner` supports 2 different Scanning Modes
-
-- Single Barcode Scanning Mode
- 1. Scans any number of barcodes but returns only one result.
- 2. Speed prioritized.
- 3. Requires user to select one as the result when scanned multiple barcodes.
-- Multiple Barcodes Scanning Mode
- 1. Scans multiple barcodes and returns all scanned results.
- 2. Read-rate prioritized.
-
-
-
+Dynamsoft Barcode Reader (DBR) enables you to embed barcode reading capabilities with enterprise-class performance in your Android applications.
+
+## Get Started
+
+
-
-> If you are looking for a solution to scan large batches of barcodes, please refer to the [`BatchBarcodeScanner`](https://www.dynamsoft.com/use-cases/batch-barcode-scanning/){:target="_blank"}. The `BatchBarcodeScanner` has much higher ability on scanning large number of barcodes. It also provides you a highly interactable UI for result previewing, editing, saving, reusing and sharing.
+## Supported Barcode Formats
+
+Dynamsoft Barcode Reader supports the following barcode formats:
-- [Build your First APP](user-guide.md)
-- [Configure Your Barcode Scanner](user-guide/configure-barcode-scanner.md)
-- [View BarcodeScanner API References](./api-reference/barcode-scanner/index.md)
-- [Check out BarcodeScanner Samples on GitHub](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/BarcodeScannerAPISamples)
+| 1D/Linear Barcodes | 2D Barcodes | GS1 DataBar | Postal Codes | Other Types |
+|--------------------------|---------------------|-------------------------| --------------------- | ------------------ |
+| Code 39/Code 39 Extended | QR Code | Omnidirectional | USPS Intelligent Mail | GS1 Composite Code |
+| Code 93 | Micro QR Code | Truncated | Postnet | Patch Code |
+| Code 128 | Data Matrix | Stacked | Planet | Pharmacode |
+| Codabar | PDF417 | Stacked Omnidirectional | Australian Post | Telepen |
+| Interleaved 2 of 5 | Micro PDF417 | Limited | UK Royal Mail | |
+| EAN-8 | Aztec Code | Expanded | KIX | |
+| EAN-13 | MaxiCode (mode 2-5) | Expanded Stacked | | |
+| UPC-A | DotCode | | | |
+| UPC-E | | | | |
+| Industrial 2 of 5 | | | | |
+| MSI (Modified Plessey) | | | | |
+| Code 11 | | | | |
+| Code 32 | | | | |
+| Matrix 2 of 5 | | | | |
-## Develop with Foundational APIs
+[Learn more about these barcode formats](https://www.dynamsoft.com/barcode-reader/barcode-types/).
-If you are looking for a fully customizable barcode decoding library, you are welcome to use the Foundational APIs.
+## API References
-- [Build your APP with foundational APIs](foundational-guide.md)
-- [Explore Features](user-guide/explore-features/index.md)
-- [View Foundation API References](./api-reference/index.md)
-- [Check out Foundational API Samples on GitHub](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples)
+- [BarcodeScanner API Reference](api-reference/barcode-scanner/index.html)
+- [Foundational API Reference](api-reference/index.html)
## System Requirements
- Supported OS: Android 5.0 (API Level 21) or higher.
- Supported ABI: **armeabi-v7a**, **arm64-v8a**, **x86** and **x86_64**.
-- Development Environment: Android Studio 2022.2.1 or higher.
+- Development Environment: **Android Studio 2024.3.2** suggested.
+
+## License Subscription
-## Download Demo App
+To develop and run your application with Dynamsoft Barcode Reader SDK, you need an active license key:
-- [View in Google Play Store](https://play.google.com/store/apps/details?id=com.dynamsoft.demo.dynamsoftbarcodereaderdemo&pli=1){:target="_blank"}
-- [Download APK](https://download2.dynamsoft.com/dbr/android/DynamsoftBarcodeReaderDemoAndroid.apk){:target="_blank"}
+- [Request a 30-day free trial license](https://www.dynamsoft.com/customer/license/trialLicense?utm_source=docs&product=dbr&package=android){:target="_blank"}
+
+## Upgrade Instructions
+
+- [Migrate from v10](migrate-from-v10/index.md)
+- [Migrate from v9](migrate-from-v9/index.md)
## Release Notes
@@ -82,16 +113,6 @@ If you are looking for a fully customizable barcode decoding library, you are we
- [Version 8.x](release-notes/android-8.html)
- [Version 7.6 and below](release-notes/android-7.html)
-## Upgrade Instructions
-
-- [How to upgrade](upgrade.md)
-
-## License Subscription
-
-To develop and run your application with Dynamsoft Barcode Reader SDK, you need an active license key:
-
-- [Request a 30-day free trial license](https://www.dynamsoft.com/customer/license/trialLicense?utm_source=docs&product=dbr&package=android){:target="_blank"}
-
## Online Store
- [Online store](https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#mobile){:target="_blank"}
diff --git a/programming/android/introduction.md b/programming/android/introduction.md
deleted file mode 100644
index 8640c153..00000000
--- a/programming/android/introduction.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-layout: default-layout
-title: Introduction Page - Dynamsoft Barcode Reader for Android
-description: This is the Introduction page of Dynamsoft Barcode Reader for Android SDK.
-keywords: Android, Introduction
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
-breadcrumbText: Android introduction
----
-
-# Dynamsoft Barcode Reader - Android SDK
-
-Dynamsoft Barcode Reader Android SDK enables users to develop Android barcode reading apps simply and efficiently.
-
-## High-Speed Barcode Decoding
-
-Dynamsoft Barcode Reader algorithm can deal with 1400+ barcodes in one minute and get 500+ unique barcode results. To reach the maximum efficiency of Dynamsoft Barcode Reader, you must make the beat parameter configuration for your usage scenarios. Regardless of the image quality, the following three parameters are the main factors that influence the decoding speed of your app.
-
-### The expected barcode formats
-
-### The pixel size (or percentage) of the scan area
-
-### The barcode count in the scan area
-
-The barcode reader will try to find as many barcodes as the given value. As a result, the less expected barcode count is, the higher barcode decoding speed will be.
-
-- If the usage scenarios of your app are unknown, please set this value 0. The barcode reader will try to find at least one barcode.
-- If the usage scenarios of your app are confirmed, please set this value exactly the number you want to scan
-
-To maximum your app's performance, please firstly define the ranges of these parameters in your usage scenarios. You can update parameters throw [`PublicRuntimeSetting`](api-reference/auxiliary-PublicRuntimeSettings.md) class so that your app can reach the expected performance.
-
-## High-Accuracy Strategies
-
-The default algorithm of Dynamsoft Barcode Reader is accurate enough in general usage scenarios. Besides, if you want to further improve the accuracy of your barcode decoding app, the following solutions are the simplest ways for you to reduce the misreading rate.
-
-### Filter the result by `confidence`
-
-The `confidence` is an attribute of the extended barcode result. The results with higher confidence are more possible to be correct. Normally, for each successfully decoded frame, the Barcode Reader will automatically output the highest confidence result. If you make a setting on the confidence value, the lower confidence result will be filtered out to make sure the accuracy. The suggested confidence value is 30. Currently, the confidence of correct results are always above 30 while the confidence of misreading results are always less then 30.
-
-### Enable the result verification mode
-
-Dynamsoft Barcode Reader verification mode will verify the results between multiple frames. The system will temporarily store the barcode results for the first time they are returned. When the barcode reader got a new result value that already exists in the results repository, the system will determine the result to be correct and output the result.
-
-## Multiple Usage Scenarios Support
-
-Besides the general barcode decoding configurations, the quality of the input image is another considerable factor that influences the efficiency and accuracy of barcode reading. To make sure that the barcode reader can cover more usage environments. Dynamsoft Barcode Reader includes a series of [image processing algorithms]({{site.parameters_reference}}image-parameter/index.html).
diff --git a/programming/android/migrate-from-v10/index.md b/programming/android/migrate-from-v10/index.md
index 05dab669..5857b041 100644
--- a/programming/android/migrate-from-v10/index.md
+++ b/programming/android/migrate-from-v10/index.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Migrate from v10 to v11 - Dynamsoft Barcode Reader for Android
+title: Migrate from v10 to v11 - Dynamsoft Barcode Reader Android
description: Follow this page to learn to upgrade Barcode Reader SDK Android edition from v10 to v11.
keywords: updates guide, android
needAutoGenerateSidebar: true
@@ -82,7 +82,7 @@ noTitleIndex: true
```
- > Please view [user guide](user-guide.md#option-1-add-the-library-via-maven) for the correct version number.
+ > Please view [user guide](../user-guide.md#option-1-add-the-library-via-maven) for the correct version number.
3. Click **Sync Now**. After the synchronization is complete, the SDK is added to the project.
@@ -150,7 +150,7 @@ You can use the template converter to upgrade your template. View the [online te
> - ✅ New features and capabilities as they're released
> - ✅ Full technical support and active maintenance
-Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
+Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](../user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
### Update the Template File
diff --git a/programming/android/migrate-from-v9/index.md b/programming/android/migrate-from-v9/index.md
index d5299331..c70e1557 100644
--- a/programming/android/migrate-from-v9/index.md
+++ b/programming/android/migrate-from-v9/index.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Migrate from v9 to v11 - Dynamsoft Barcode Reader for Android
+title: Migrate from v9 to v11 - Dynamsoft Barcode Reader Android
description: Follow this page to learn to upgrade Barcode Reader SDK Android edition from v9 to v11.
keywords: updates guide, android
needAutoGenerateSidebar: true
@@ -26,7 +26,7 @@ noTitleIndex: true
> - ✅ New features and capabilities as they're released
> - ✅ Full technical support and active maintenance
-Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
+Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](../user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
**⚠️ Version 9.x is in maintenance mode only** - no new features or algorithm updates will be backported.
@@ -87,7 +87,7 @@ Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCapt
```
- > Please view [user guide](user-guide.md#option-1-add-the-library-via-maven) for the correct version number.
+ > Please view [user guide](../user-guide.md#option-1-add-the-library-via-maven) for the correct version number.
3. Click **Sync Now**. After the synchronization is complete, the SDK is added to the project.
diff --git a/programming/android/release-notes/android-10.md b/programming/android/release-notes/android-10.md
index 169c2080..06b7d505 100644
--- a/programming/android/release-notes/android-10.md
+++ b/programming/android/release-notes/android-10.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: Android Release Notes v10.x - Dynamsoft Barcode Reader
-description: This is the release notes page of Dynamsoft Barcode Reader for Android SDK v10.x.
+description: This is the release notes page of Dynamsoft Barcode Reader Android SDK v10.x.
keywords: release notes, android, version 10.x,
needAutoGenerateSidebar: true
needGenerateH3Content: false
@@ -247,4 +247,4 @@ noTitleIndex: true
{%- include release-notes/product-highlight-10.0.0.md -%}
-The APIs of Dynamsoft Barcode Reader are comprehensively updated. Please follow the view [upgrade instructions]({{ site.android }}upgrade.html) to update your code.
+The APIs of Dynamsoft Barcode Reader are comprehensively updated. Please follow the view [upgrade instructions]({{ site.android }}migrate-from-v9/) to update your code.
diff --git a/programming/android/release-notes/android-11.md b/programming/android/release-notes/android-11.md
index 8c7a8fd3..2c862b66 100644
--- a/programming/android/release-notes/android-11.md
+++ b/programming/android/release-notes/android-11.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: Android Release Notes v11.x - Dynamsoft Barcode Reader
-description: This is the release notes page of Dynamsoft Barcode Reader for Android SDK v11.x.
+description: This is the release notes page of Dynamsoft Barcode Reader Android SDK v11.x.
keywords: release notes, android, version 11.x,
needAutoGenerateSidebar: true
needGenerateH3Content: false
@@ -10,6 +10,55 @@ noTitleIndex: true
# Release Notes for Android SDK - 11.x
+## 11.6.1000 (07/30/2026)
+
+### Highlights
+
+#### Multi-Threaded Barcode Decoding
+
+- **Get results sooner with parallel processing** - Barcode decoding now uses a breadth-first strategy that decomposes a single DBR Task into one Localization Work and one or more Decoding Works. This improves thread utilization and reduces the chance that a slow `DeblurMode` attempt blocks other faster decoding attempts, helping valid results come back sooner.
+
+#### DataMatrix Color Inversion Detection
+
+- **Handle normal and inverted DataMatrix more efficiently** - Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) to automatically handle both normal and inverted DataMatrix barcodes. Instead of processing the whole image twice, the SDK applies dual-polarity handling only to localized DataMatrix regions, which makes processing faster in dual-polarity scenarios.
+
+#### Barcode Layout Analysis
+
+- **Decode dense grid barcodes more completely** - Added [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) to organize barcode locations into logical line or matrix layouts and infer unrecognized barcode regions when gaps exist, enabling workflows such as fast first-pass decoding, missing-region inference, and targeted second-pass decoding on dense N*M barcode layouts.
+
+#### Cross-Version License Support
+
+- **Use a single license across SDK versions** - Full License 1.0 keys (starting with "f") that are non-perpetual are no longer version-checked, so the same key can be used across SDK versions without reactivation.
+
+### New
+
+- Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) parameter for `BarcodeFormatSpecification` to support automatic color-inversion detection for DataMatrix barcodes.
+
+- Added [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_android_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`LayoutPattern`]({{ site.dcvb_android_api }}utility/enum-layout-pattern.html) enumeration with values `LP_UNKNOWN`, `LP_LINES`, and `LP_MATRIX`.
+
+- Added [`LayoutElementSource`]({{ site.dcvb_android_api }}utility/enum-layout-element-source.html) enumeration with values `LES_NONE`, `LES_INPUT`, and `LES_INFERRED`.
+
+- Added [`MeasureUnit`]({{ site.dcvb_android_api }}core/enum-measure-unit.html) enumeration with values `MU_PIXEL` and `MU_PERCENTAGE`.
+
+- Added [`LayoutAxis`]({{ site.dcvb_android_api }}utility/layout-axis.html), [`LayoutAnalysisParameter`]({{ site.dcvb_android_api }}utility/layout-analysis-parameter.html), [`LayoutElement`]({{ site.dcvb_android_api }}utility/layout-element.html), and [`LayoutAnalysisResult`]({{ site.dcvb_android_api }}utility/layout-analysis-result.html) for layout analysis configuration and results.
+
+- Added a new `GridBarcodeScanner` sample (with `sample_grid.png`) to demonstrate how to use [`LayoutAnalyzer`]({{ site.dcvb_android_api }}utility/layout-analyzer.html) for barcode grid layout detection and logical row/column mapping.
+
+### Changed
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of Work-level threads in the CVR thread pool. For DBR tasks, each Localization Work and Decoding Work occupies one thread slot. DLR and DDN tasks continue to occupy one thread per task.
+
+- [`set_device_friendly_name()`]({{ site.dcvb_android_api }}license/license-manager.html#set_device_friendly_name) now enforces parameter constraints: maximum 64 characters, allowed characters are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.), and must start and end with a letter or digit. Returns [`EC_PARAMETER_VALUE_INVALID`]({{ site.dcvb_android_api }}core/enum-error-code.html) if constraints are not met.
+
+- Improved the default display behavior of corner adjustment points in `ImageEditorView`. Previously, users had to tap the view before the corner adjustment points became visible.
+
+### Fixed
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
+
## 11.4.3000 (07/07/2026)
### Security Updates
diff --git a/programming/android/release-notes/index.md b/programming/android/release-notes/index.md
index 40774c68..fd49a5c9 100644
--- a/programming/android/release-notes/index.md
+++ b/programming/android/release-notes/index.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: Android Release Notes - Dynamsoft Barcode Reader Android SDK
-description: This is the release notes page of Dynamsoft Barcode Reader for Android SDK.
+description: This is the release notes page of Dynamsoft Barcode Reader Android SDK.
keywords: release notes, android
needAutoGenerateSidebar: false
breadcrumbText: Release Notes
@@ -9,6 +9,7 @@ breadcrumbText: Release Notes
# Dynamsoft Barcode Reader Android SDK - Release Notes
+- [11.6.1000 (07/30/2026)]({{ site.android_release_notes }}android-11.html#1161000-07302026)
- [11.4.3000 (07/07/2026)]({{ site.android_release_notes }}android-11.html#1143000-07072026)
- [11.4.1300 (05/20/2026)]({{ site.android_release_notes }}android-11.html#1141300-05202026)
- [11.4.1200 (04/02/2026)]({{ site.android_release_notes }}android-11.html#1141200-04022026)
diff --git a/programming/android/upgrade.md b/programming/android/upgrade.md
index ad4f8022..2b4d79fa 100644
--- a/programming/android/upgrade.md
+++ b/programming/android/upgrade.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: How to update - Dynamsoft Barcode Reader for Android
+title: How to update - Dynamsoft Barcode Reader Android
description: Follow the upgrade instructions to learn to upgrade Barcode Reader SDK Android edition from 10 to 11.
keywords: updates guide, android
needAutoGenerateSidebar: true
diff --git a/programming/android/user-guide.md b/programming/android/user-guide.md
index a32fdf64..af94542f 100644
--- a/programming/android/user-guide.md
+++ b/programming/android/user-guide.md
@@ -1,14 +1,14 @@
---
layout: default-layout
-title: User Guide - Dynamsoft Barcode Reader for Android (Ready to Use UI edition)
-description: This is the user guide of Dynamsoft Barcode Reader for Android SDK demonstrating the Ready to Use UI.
+title: User Guide - Dynamsoft Barcode Reader Android (Ready to Use UI edition)
+description: This is the user guide of Dynamsoft Barcode Reader Android SDK demonstrating the Ready to Use UI.
keywords: user guide, java, kotlin, android
needAutoGenerateSidebar: true
needGenerateH3Content: true
noTitleIndex: true
---
-# BarcodeScanner Android User Guide
+# Quick Start: Ready-to-Use Component
This user guide will walk through the [ScanSingleBarcode](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/BarcodeScannerAPISamples/ScanSingleBarcode/) sample app. When creating your own project, please use this sample as a reference. This guide uses [`BarcodeScanner`](api-reference/barcode-scanner/index.md) API which aim to elevate the UI creation process with less code and offer a more pleasant and intuitive UI for your app.
@@ -17,7 +17,7 @@ This user guide will walk through the [ScanSingleBarcode](https://github.com/Dyn
> This guide aims at scanning a single barcode with the `BarcodeScanner` component.
>
> - If you have requirement for scanning multiple barcodes, you may refer to the [ScanMultipleBarcodes](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/BarcodeScannerAPISamples/ScanMultipleBarcodes/) sample or read [Enable Multiple Barcode Scanning](user-guide/scanner-multi-barcodes.md) article.
-> - If you have more complex customization requirements for the interface, you may refer to the [Foundational API Samples](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/) or [Build your APP with Foundational APIs]({{ site.android }}user-guide.html) article.
+> - If you have more complex customization requirements for the interface, you may refer to the [Foundational API Samples](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/) or [Build your APP with Foundational APIs]({{ site.android }}foundational-guide.html) article.
## Requirements
@@ -76,13 +76,13 @@ There are two ways in which you can include the `dynamsoftbarcodereaderbundle` l
>1.
```groovy
dependencies {
- implementation 'com.dynamsoft:barcodereaderbundle:11.4.3000'
+ implementation 'com.dynamsoft:barcodereaderbundle:11.6.1000'
}
```
2.
```kotlin
dependencies {
- implementation("com.dynamsoft:barcodereaderbundle:11.4.3000")
+ implementation("com.dynamsoft:barcodereaderbundle:11.6.1000")
}
```
@@ -333,7 +333,7 @@ public class MainActivity extends AppCompatActivity {
// The following settings will display a scan region on the view. Only the barcode in the scan region can be decoded.
config.setScanRegion(new DSRect(0.15f, 0.25f, 0.85f, 0.65f, true));
// The following code enables the beep sound when a barcode is scanned.
- config.setBeepEnabled = true
+ config.setBeepEnabled(true);
// The following code controls whether to display a torch button.
config.setTorchButtonVisible(true);
// The following code controls whether to display a close button.
@@ -403,11 +403,3 @@ Now that the code has been written and the project complete, it's time to run th
## Conclusion
Now that your `BarcodeScanner` project is up and running you should be able to see a clean and simplified UI that contains all the necessary UI elements that are needed to make the barcode scanning process as easy and intuitive for the user as it can be.
-
-## Next Steps
-
-For more configurations of the BarcodeScanner, please refer to the [Configure Barcode Scanner](user-guide/configure-barcode-scanner.md) section.
-
-If you would like to work with the original framework and create your own customized UI, please refer to the [Build Your APP with Foundational APIs](foundational-guide.md).
-
-If you have any questions in regards to the usage of the new specialized SDK, do not hesitate to get in touch with the [Dynamsoft Support Team](https://www.dynamsoft.com/contact/).
diff --git a/programming/android/user-guide/capabilities/add-functional-buttons.md b/programming/android/user-guide/capabilities/add-functional-buttons.md
new file mode 100644
index 00000000..a116047f
--- /dev/null
+++ b/programming/android/user-guide/capabilities/add-functional-buttons.md
@@ -0,0 +1,51 @@
+---
+layout: default-layout
+title: Customize the UI of BarcodeScanner - Dynamsoft Barcode Reader Android
+description: Learn how to customize the BarcodeScanner UI on Android.
+keywords: BarcodeScanner, scanner, Android, scan region, torch button, close button, scan laser
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Configure the UI Elements
+
+| Available Buttons |
+| ----------------- |
+| Torch button |
+| Camera toggle button |
+| Close button (BarcodeScanner API only) |
+
+BarcodeScanner provides a set of UI elements that you can easily customize.
+
+
+
+
buttons
+
+
+- Torch button: A clickable button that turns the torch on or off.
+- Camera toggle button: A clickable button that switches the front/back-facing camera.
+- Close button: Stops barcode scanning and returns to the previous activity.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraView cameraView = findViewById(R.id.camera_view);
+cameraView.setTorchButtonVisible(true);
+cameraView.setCameraToggleButtonVisible(true);
+```
+2.
+```kotlin
+val cameraView = findViewById(R.id.camera_view)
+cameraView.torchButtonVisible = true
+cameraView.cameraToggleButtonVisible = true
+```
+
+**Related APIs**
+
+- [`CameraView`]({{ site.dce_android }}auxiliary-api/dcecameraview.html)
+ - [setTorchButtonVisible]({{ site.dce_android }}auxiliary-api/dcecameraview.html#settorchbuttonvisible)
+ - [setCameraToggleButtonVisible]({{ site.dce_android }}auxiliary-api/dcecameraview.html#setcameratogglebuttonvisible)
diff --git a/programming/android/user-guide/capabilities/add-graphics.md b/programming/android/user-guide/capabilities/add-graphics.md
new file mode 100644
index 00000000..fc05c9a6
--- /dev/null
+++ b/programming/android/user-guide/capabilities/add-graphics.md
@@ -0,0 +1,131 @@
+---
+layout: default-layout
+title: UI Configurations - Dynamsoft Barcode Reader Android
+description: Learn how to add basic UI elements on the DCECameraView for Android edition.
+keywords: UI Configurations, Android
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Customize Overlay with DrawingItems
+
+`CameraView` allows you to define your own graphics diplaying rules with the `Drawing` APIs.
+
+- `DrawingItem`: Graphics or other UI elements.
+- `DrawingLayer`: The layer for displaying the `DrawingItems`.
+- `DrawingStyle`: The style for the `DrawingItem`.
+
+## Hide Barcode Highlight Overlay
+
+Barcode highlight overlay is displayed by default. You can set the layer invisible to disable it:
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+// Get the layer first.
+DrawingLayer layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID);
+// Set the visible property to true or false to control the visibility.
+layer.setVisible(false);
+```
+2.
+```kotlin
+// Get the layer first.
+val layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID)
+// Set the visible property to true or false to control the visibility.
+layer.setVisible(false)
+```
+
+## Add User-Define DrawingItem(s)
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+DrawingLayer barcodeLayer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID);
+ArrayList drawingItemArrayList = new ArrayList<>();
+QuadDrawingItem quadDrawingItem = new QuadDrawingItem(...);
+drawingItemArrayList.add(quadDrawingItem);
+barcodeLayer.setDrawingItems(drawingItemArrayList);
+// You can also use the append logic if you don't want to clear the previous items.
+// barcodeLayer.addDrawingItems(drawingItemArrayList);
+```
+2.
+```kotlin
+val barcodeLayer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID)
+val drawingItemArrayList = ArrayList()
+val quadDrawingItem = QuadDrawingItem(...)
+drawingItemArrayList.add(quadDrawingItem)
+barcodeLayer.setDrawingItems(drawingItemArrayList)
+// You can also use the append logic if you don't want to clear the previous items.
+// barcodeLayer.addDrawingItems(drawingItemArrayList)
+```
+
+## How to Change the DrawingStyle
+
+### Use Preset Styles
+
+Set the style of the highlight overlays with a preset style:
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+// Get the layer first.
+DrawingLayer layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID);
+// Change the style of the layer.
+layer.setDefaultStyle(DrawingStyleManager.STYLE_BLUE_STROKE);
+```
+2.
+```kotlin
+// Get the layer first.
+val layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID)
+// Change the style of the layer.
+layer.setDefaultStyle(DrawingStyleManager.STYLE_BLUE_STROKE)
+```
+
+### Use User Defined Styles
+
+Set the style of the highlight overlays with a user defined style:
+
+1. Create colours in the **values/colours.xml** file.
+
+ ```xml
+ #FF03DAC5
+ #2003DAC5
+ ```
+
+2. Create your style with the colour and set to the layer.
+
+
+ >- Java
+ >- Kotlin
+ >
+ >1.
+ ```java
+ // Get the layer first.
+ DrawingLayer layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID);
+ // Create a new DrawingStyle via the DrawingStyleManager.
+ int teal_200_transparent = ResourcesCompat.getColor(MainActivity.this.getResources(), R.color.teal_200_transparent, null);
+ int teal_200 = ResourcesCompat.getColor(MainActivity.this.getResources(), R.color.teal_200, null);
+ int style = DrawingStyleManager.createDrawingStyle(teal_200, 1.0f,teal_200_transparent,teal_200);
+ // Set the newly created DrawingStyle to the layer.
+ layer.setDefaultStyle(style);
+ ```
+ 2.
+ ```kotlin
+ val layer = cameraView.getDrawingLayer(DrawingLayer.DBR_LAYER_ID)
+ // Create a new DrawingStyle via the DrawingStyleManager.
+ val teal_200_transparent = ResourcesCompat.getColor(this@MainActivity.getResources(), R.color.teal_200_transparent, null)
+ val teal_200 = ResourcesCompat.getColor(this@MainActivity.getResources(), R.color.teal_200, null)
+ val style = DrawingStyleManager.createDrawingStyle(teal_200, 1.0f, teal_200_transparent, teal_200)
+ // Set the newly created DrawingStyle to the layer.
+ layer.setDefaultStyle(style)
+ ```
diff --git a/programming/android/user-guide/capabilities/barcode-formats.md b/programming/android/user-guide/capabilities/barcode-formats.md
new file mode 100644
index 00000000..56b1dccc
--- /dev/null
+++ b/programming/android/user-guide/capabilities/barcode-formats.md
@@ -0,0 +1,115 @@
+---
+layout: default-layout
+title: Configure Barcode Formats - Dynamsoft Barcode Reader Android
+description: Learn how to configure barcode formats in the Dynamsoft Barcode Reader Android SDK.
+keywords: barcode formats, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Configure Barcode Formats
+
+There are two ways to configure barcode formats:
+
+- Configure formats in code.
+- Configure formats together with other settings in the template.
+
+## Configure Formats in Your Code
+
+Specify barcode formats using a combined value of [`EnumBarcodeFormat`]({{ site.dbr_android_api }}enum/barcode-format.html).
+
+- Use bitwise OR (`|`) to combine multiple formats.
+- `EnumBarcodeFormat.BF_DEFAULT` includes all common formats (`BF_ONED`, `BF_GS1_DATABAR`, `BF_PDF417`, `BF_QR_CODE`, `BF_DATAMATRIX`, `BF_AZTEC`, `BF_MAXICODE`, `BF_MICRO_QR`, `BF_MICRO_PDF417`, and `BF_GS1_COMPOSITE`).
+- Use `EnumBarcodeFormat.BF_ALL` to enable all supported formats.
+- Use group values like `EnumBarcodeFormat.BF_ONED` when appropriate.
+
+Example:
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+try {
+ SimplifiedCaptureVisionSettings settings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
+ SimplifiedBarcodeReaderSettings barcodeSettings = settings.barcodeSettings;
+ // Only read QR Code.
+ barcodeSettings.barcodeFormatIds = EnumBarcodeFormat.BF_QR_CODE | EnumBarcodeFormat.BF_DATAMATRIX;
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, settings);
+} catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+try {
+ val settings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES)
+ val barcodeSettings = settings.barcodeSettings
+ // Only read QR Code.
+ barcodeSettings.barcodeFormatIds = EnumBarcodeFormat.BF_QR_CODE or EnumBarcodeFormat.BF_DATAMATRIX
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, settings)
+} catch (e: CaptureVisionRouterException) {
+ throw RuntimeException(e)
+}
+```
+
+**Related API(s)**
+
+- [`SimplifiedCaptureVisionSettings.barcodeSettings.barcodeFormatIds`]({{ site.dbr_android_api }}simplified-barcode-reader-settings.html#barcodeformatids)
+
+## Configure Formats in a Template
+
+Barcode formats are specified in `BarcodeFormatIds` under `BarcodeReaderTaskSettingOptions`. For example:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "ImageROIProcessingNameArray": [ "ROI_2D" ],
+ "Name": "ReadCommon2D",
+ }
+ ],
+ "TargetROIDefOptions": [
+ {
+ "Name": "ROI_2D",
+ "TaskSettingNameArray": [ "Task_2D" ]
+ }
+ ],
+ "BarcodeReaderTaskSettingOptions": [
+ {
+ "Name": "Task_2D",
+ "BarcodeFormatIds": [ "BF_QR_CODE", "BF_DATAMATRIX", "BF_PDF417", "BF_MAXICODE" ],
+ "SectionArray": [
+ {
+ "Section": "ST_BARCODE_LOCALIZATION",
+ "ImageParameterName": "ip"
+ },
+ {
+ "Section": "ST_BARCODE_DECODING",
+ "ImageParameterName": "ip"
+ }
+ ]
+ }
+ ],
+ "ImageParameterOptions": [
+ {
+ "Name": "ip"
+ }
+ ]
+}
+```
+
+For common formats, you can download and use the preset templates below:
+
+| Barcode Format(s) | Template |
+| ----------------- | -------- |
+| EAN13, EAN8, UPC_A, UPC_E, GS1 Databar | [ReadOneDRetail.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDRetail.json) |
+| Code128, Code39, ITF, Codabar, MSI Code | [ReadOneDIndustrial.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDIndustrial.json) |
+| QR Code | [ReadQR.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadQR.json) |
+| Data Matrix | [ReadDataMatrix.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDataMatrix.json) |
+| PDF417 | [ReadPDF417.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadPDF417.json) |
+| Aztec | [ReadAztec.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadAztec.json) |
+| QR Code, Data Matrix, PDF417 | [ReadCommon2D.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadCommon2D.json) |
+| DotCode | [ReadDotCode.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDotCode.json) |
diff --git a/programming/android/user-guide/capabilities/camera-control.md b/programming/android/user-guide/capabilities/camera-control.md
new file mode 100644
index 00000000..ddec0b2b
--- /dev/null
+++ b/programming/android/user-guide/capabilities/camera-control.md
@@ -0,0 +1,153 @@
+---
+layout: default-layout
+title: Camera Control - Dynamsoft Barcode Reader Android
+description: Learn how to control the camera for Dynamsoft Barcode Reader Android, including zoom, focus and other features.
+keywords: camera, Android, auto-zoom, zoom, auto-focus, focus, enhanced features
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Camera Control
+
+This page introduces the main camera control features available in Dynamsoft Barcode Reader for Android. It explains how to manage focus behavior, configure zoom for small or distant barcodes, and enable additional camera enhancement features to improve scanning performance in specific scenarios.
+
+## Focus Control & Focus Modes
+
+In most cases, the camera automatically determines when focus is needed and adjusts the focal length accordingly. This behavior is called continuous auto-focus. In addition, the camera view supports tap-to-focus, which allows the user to trigger auto-focus manually. When these default focus behaviors do not meet your requirements, you can use the methods described in this page to control focus more precisely.
+
+### Trigger an Auto-Focus
+
+Use the following code to trigger auto-focus:
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mCamera.setFocus(new PointF(0.5f,0.5f));
+```
+2.
+```kotlin
+cameraEnhancer.setFocus(PointF(0.5f,0.5f))
+```
+
+Optionally, you can specify the focus mode when triggering auto-focus.
+
+- FM_LOCKED: Lock the focal-length after this focus.
+- FM_CONTINUOUS_AUTO: Allow the camera to adjust the focal-length automatically after this focus.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mCamera.setFocus(new PointF(0.5f,0.5f), EnumFocusMode.FM_LOCKED);
+mCamera.setFocus(new PointF(0.5f,0.5f), EnumFocusMode.FM_CONTINUOUS_AUTO);
+```
+2.
+```kotlin
+cameraEnhancer.setFocus(PointF(0.5f,0.5f), EnumFocusMode.FM_CONTINUOUS_AUTO)
+cameraEnhancer.setFocus(PointF(0.5f,0.5f), EnumFocusMode.FM_LOCKED)
+```
+
+### Enhanced Focus
+
+Use this feature if your device has difficulty focusing.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraEnhancer mCamera = new CameraEnhancer(this);
+try {
+ mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_ENHANCED_FOCUS);
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mCamera = CameraEnhancer(this)
+mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_ENHANCED_FOCUS)
+```
+
+**Related API**
+
+- [`enableEnhancedFeatures`]({{ site.dce_android }}primary-api/camera-enhancer.html#enableenhancedfeatures)
+
+## Auto-Zoom & Zoom Factor
+
+Zoom control is commonly used when processing small barcodes or scanning from a long distance. There are two zoom control features:
+
+- Auto-zoom: Lets the library determine whether to zoom in.
+- Zoom factor: Lets you set the zoom factor directly. This is commonly used when focusing on small barcodes.
+
+### Auto Zoom
+
+If your application mainly scans barcodes at a normal distance but also needs to recognize barcodes that are farther away, enabling auto-zoom is recommended.
+
+
+
+
Auto Zoom
+
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraEnhancer mCamera = new CameraEnhancer(this);
+try {
+ mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_AUTO_ZOOM);
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mCamera = CameraEnhancer(this)
+mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_AUTO_ZOOM)
+```
+
+**Related API**
+
+- [`enableEnhancedFeatures`]({{ site.dce_android }}primary-api/camera-enhancer.html#enableenhancedfeatures)
+
+### Zoom Factor
+
+If your application mainly targets small barcodes or barcodes that are far from the camera, it is recommended to control the zoom factor directly.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraEnhancer mCamera = new CameraEnhancer(this);
+mCamera.setZoomFactor(2.0f);
+```
+2.
+```kotlin
+val mCamera = CameraEnhancer(this)
+mCamera.zoomFactor = 2.0f
+```
+
+**Related API**
+
+- [`setZoomFactor`]({{ site.dce_android }}primary-api/camera-enhancer.html#setzoomfactor)
+
+## Enhanced Features
+
+| Feature | Description |
+| ------- | ----------- |
+| EF_FRAME_FILTER | Filters blurry video frames using algorithm-based processing. It is usually unnecessary for standard barcode scanning unless you are facing significant accuracy issues. |
+| EF_SENSOR_CONTROL | Filters video frames captured while the device is moving based on sensor data. It is usually unnecessary for standard barcode scanning unless you are facing significant accuracy issues. |
+| EF_ENHANCED_FOCUS | Improves autofocus performance on older devices. If you enable this feature, it is recommended to use it only on older devices, as it may have a negative effect on cameras whose autofocus already works well. |
+| EF_AUTO_ZOOM | Automatically zooms in to recognize barcodes that are far from the camera. |
+| EF_SMART_TORCH | Provides a smart torch button prompt. When lighting conditions are poor, the torch button appears automatically. |
diff --git a/programming/android/user-guide/capabilities/config-simplified-settings.md b/programming/android/user-guide/capabilities/config-simplified-settings.md
new file mode 100644
index 00000000..bd4d8a74
--- /dev/null
+++ b/programming/android/user-guide/capabilities/config-simplified-settings.md
@@ -0,0 +1,62 @@
+---
+layout: default-layout
+title: Configuring Simplified Settings - Dynamsoft Barcode Reader Android
+description: Learn how to configure simplified settings in the Dynamsoft Barcode Reader Android SDK.
+keywords: simplified settings, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Configure Simplified Settings
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+This page explores how to configure basic image processing settings with [`SimplifiedCaptureVisionSettings`]({{ site.dcvb_android_api }}capture-vision-router/simplified-capture-vision-settings.html). The following APIs will be used:
+
+1. `getSimplifiedSettings`: Get the settings of the specified `template`.
+2. `updateSettings`: Update the settings to the specified `template`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter;
+mRouter = new CaptureVisionRouter();
+try {
+ // Obtain current runtime settings.
+ SimplifiedCaptureVisionSettings simplifiedCaptureVisionSettings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
+ simplifiedCaptureVisionSettings.minImageCaptureInterval = 200;
+ simplifiedCaptureVisionSettings.timeout = 200;
+ SimplifiedBarcodeReaderSettings simplifiedBarcodeReaderSettings = simplifiedCaptureVisionSettings.barcodeSettings;
+ simplifiedBarcodeReaderSettings.barcodeFormatIds = EnumBarcodeFormat.BF_QR_CODE | EnumBarcodeFormat.BF_DATAMATRIX;
+ simplifiedBarcodeReaderSettings.expectedBarcodesCount = 1;
+ // Update settings. Here you must specify the same template name you used when getting the settings.
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, simplifiedCaptureVisionSettings);
+} catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+try {
+ // Obtain current runtime settings.
+ val simplifiedCaptureVisionSettings = mRouter?.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES)
+ simplifiedCaptureVisionSettings?.minImageCaptureInterval = 200
+ simplifiedCaptureVisionSettings?.timeout = 200
+ val simplifiedBarcodeReaderSettings = simplifiedCaptureVisionSettings?.barcodeSettings
+ simplifiedBarcodeReaderSettings!!.barcodeFormatIds = EnumBarcodeFormat.BF_QR_CODE or EnumBarcodeFormat.BF_DATAMATRIX
+ simplifiedBarcodeReaderSettings.expectedBarcodesCount = 1
+ // Update settings. Here you must specify the same template name you used when getting the settings.
+ mRouter?.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, simplifiedCaptureVisionSettings)
+} catch (e: CaptureVisionRouterException) {
+ throw RuntimeException(e)
+}
+```
+
+> [!Note]
+> To use the settings you have configured, you must specify the same template name when triggering the `startCapturing` or `capture` methods.
diff --git a/programming/android/user-guide/capabilities/customize-ui-index.md b/programming/android/user-guide/capabilities/customize-ui-index.md
new file mode 100644
index 00000000..7caae0e4
--- /dev/null
+++ b/programming/android/user-guide/capabilities/customize-ui-index.md
@@ -0,0 +1,25 @@
+---
+layout: default-layout
+title: Customize the UI - Dynamsoft Barcode Reader Android
+description: Learn how to customize the UI of Dynamsoft Barcode Reader on Android.
+keywords: BarcodeScanner, barcode reader, Android, scan region, torch button, close button, scan laser
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Customize Your UI
+
+| Customizable UI Elements | Descriptions |
+| ------------------------ | ------------ |
+| [Torch button](add-functional-buttons.md) | The button for you to turn on/off the torch. |
+| [Camera toggle button](add-functional-buttons.md) | The button for you to switch between front/back-facing cameras. |
+| [Close button](add-functional-buttons.md) (BarcodeScanner API only) | The button for you to manually close the BarcodeScanner. |
+| [Scan Region stroke](scan-region-style.md) | The boundary of the scan region. |
+| [Scan Region Mask](scan-region-style.md) | The mask outside the scan region. |
+| [Graphics (DrawingItems)](add-graphics.md) | Quadrilateral, rectangle, arc, etc. |
+
+
+
+
Customizable UI Elements
+
diff --git a/programming/android/user-guide/capabilities/feedback.md b/programming/android/user-guide/capabilities/feedback.md
new file mode 100644
index 00000000..05a1f3a5
--- /dev/null
+++ b/programming/android/user-guide/capabilities/feedback.md
@@ -0,0 +1,32 @@
+---
+layout: default-layout
+title: Add Scan Feedback for BarcodeScanner - Dynamsoft Barcode Reader Android
+description: Learn how to enable scan feedback for BarcodeScanner on Android, including beep and vibration.
+keywords: BarcodeScanner, scanner, Android, feedback, beep, vibration
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Add Scan Feedback
+
+Trigger a beep sound or vibration when a barcode is scanned successfully.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+Feedback.beep();
+Feedback.vibrate();
+```
+2.
+```kotlin
+Feedback.beep()
+Feedback.vibrate()
+```
+
+**Related API**
+
+- [`Feedback`]({{ site.dce_android }}auxiliary-api/dcefeedback.html)
diff --git a/programming/android/user-guide/capabilities/get-original-image.md b/programming/android/user-guide/capabilities/get-original-image.md
new file mode 100644
index 00000000..61ab1d78
--- /dev/null
+++ b/programming/android/user-guide/capabilities/get-original-image.md
@@ -0,0 +1,104 @@
+---
+layout: default-layout
+title: Get Original Image - Dynamsoft Barcode Reader Android
+description: Learn how to get the original image that produces the current result in the Dynamsoft Barcode Reader Android SDK.
+keywords: original image, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Get Original Image
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+## Get by HashId (Recommended)
+
+Keep your current result output logic unchanged. Use `originalImageHashId` from `DecodedBarcodesResult` to fetch the original image only when needed.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
+ ImageData originalImage = mRouter.getIntermediateResultManager().getOriginalImage(result.getOriginalImageHashId());
+}
+```
+2.
+```kotlin
+override fun onDecodedBarcodesReceived(result: DecodedBarcodesResult) {
+ val originalImage = mRouter.intermediateResultManager.getOriginalImage(result.originalImageHashId)
+}
+```
+
+- [`getOriginalImageHashId`]({{ site.dbr_android_api }}decoded-barcodes-result.html)
+- [`getIntermediateResultManager`]({{ site.dcvb_android_api }}capture-vision-router/intermediate-result.html#getintermediateresultmanager)
+- [`getOriginalImage`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html#getoriginalimage)
+
+## Include Original Image in Results
+
+Enable original image output in settings so each capture result can directly contain the original image item. This is convenient for downstream processing, but usually adds more data to each result.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+try {
+ SimplifiedCaptureVisionSettings settings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
+ // Set the outputOriginalImage to true so that the original image will be included in the CapturedResultReceiver.
+ settings.outputOriginalImage = true;
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, settings);
+} catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+}
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onCapturedResultReceived(@NonNull CapturedResult result) {
+ if (result.getItems().length>1)
+ {
+ for(CapturedResultItem item:result.getItems())
+ {
+ if (item.getType() == EnumCapturedResultItemType.CRIT_BARCODE)
+ {
+ // Use barcode result
+ }else if (item.getType() == EnumCapturedResultItemType.CRIT_ORIGINAL_IMAGE)
+ {
+ // USe original image
+ }
+ }
+ }
+ }
+});
+```
+2.
+```kotlin
+try {
+ val settings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES)
+ // Set outputOriginalImage to true so that the original image will be included in CapturedResultReceiver.
+ settings.outputOriginalImage = true
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, settings)
+} catch (e: CaptureVisionRouterException) {
+ throw RuntimeException(e)
+}
+mRouter.addResultReceiver(object : CapturedResultReceiver {
+ override fun onCapturedResultReceived(result: CapturedResult) {
+ if (result.items.size > 1) {
+ for (item in result.items) {
+ if (item.type == EnumCapturedResultItemType.CRIT_BARCODE) {
+ // Use barcode result
+ } else if (item.type == EnumCapturedResultItemType.CRIT_ORIGINAL_IMAGE) {
+ // Use original image
+ }
+ }
+ }
+ }
+})
+```
+
+- [`outputOriginalImage`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html#outputoriginalimage)
+- [`onCapturedResultReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#oncapturedresultreceived)
diff --git a/programming/android/user-guide/capabilities/index.md b/programming/android/user-guide/capabilities/index.md
new file mode 100644
index 00000000..400bfa5b
--- /dev/null
+++ b/programming/android/user-guide/capabilities/index.md
@@ -0,0 +1,94 @@
+---
+layout: default-layout
+title: Capabilities - Dynamsoft Barcode Reader Android
+description: Index of Dynamsoft Barcode Reader Android capabilities.
+keywords: capabilities, feature index, Android, java, kotlin
+breadcrumbText: Capabilities
+noTitleIndex: false
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Capabilities
+
+Find the feature you need quickly by keyword.
+
+
+
+## Input
+
+
diff --git a/programming/android/user-guide/capabilities/init-customized-template.md b/programming/android/user-guide/capabilities/init-customized-template.md
new file mode 100644
index 00000000..f70c7570
--- /dev/null
+++ b/programming/android/user-guide/capabilities/init-customized-template.md
@@ -0,0 +1,45 @@
+---
+layout: default-layout
+title: Initialize Customized Templates - Dynamsoft Barcode Reader Android User Guide
+description: Learn how to initialize customized templates in the Dynamsoft Barcode Reader Android SDK.
+keywords: customized templates, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Initialize Customized Templates
+
+Using a template file is one of the quickest ways to improve BarcodeScanner performance. A template file is a JSON file (or JSON string) that contains a set of algorithm parameter settings. [Contact us](https://www.dynamsoft.com/company/customer-service/#contact) to get a customized template for your scanner.
+
+## Preparation
+
+Add a **Templates** folder under your project's assets directory at **src\main\assets\Templates**. Put your JSON file in the **Templates** folder. Here, we use **ReadQRCode.json** as an example.
+
+
+
+
init settings
+
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+try {
+ mRouter.initSettingsFromFile("ReadQRCodes.json");
+} catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+mRouter?.initSettingsFromFile("ReadQRCodes.json")
+```
+
+**Related API(s)**
+
+- [`initSettingsFromFile`]({{ site.dcvb_android_api }}capture-vision-router/settings.html#initsettingsfromfile)
diff --git a/programming/android/user-guide/capabilities/multi-frame-cross-filter.md b/programming/android/user-guide/capabilities/multi-frame-cross-filter.md
new file mode 100644
index 00000000..e09e5efa
--- /dev/null
+++ b/programming/android/user-guide/capabilities/multi-frame-cross-filter.md
@@ -0,0 +1,155 @@
+---
+layout: default-layout
+title: Multi-Frame Cross Filter - Dynamsoft Barcode Reader Android
+description: Learn how to use the multi-frame cross filter in Dynamsoft Barcode Reader Android.
+keywords: filter, Android, multi-frame cross filter
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# How to Use Multi-Frame Cross Filter
+
+> [!Important]
+> Multi-frame cross filter features are internally implemented in the `BarcodeScanner` component and are not customizable. This page explains how to use them with Foundational APIs.
+
+Multi-frame cross filter is a collection of result-filtering features designed for camera-based barcode scanning.
+
+| Filter Name | Description |
+| ----------- | ----------- |
+| Cross Verification | Improves accuracy. |
+| Overlapping | Improves read rate for multi-barcode scanning. |
+| Deduplication | Removes duplicate results. |
+
+## Cross Verification
+
+Cross verification is one of the most commonly used techniques for improving scanning accuracy.
+
+### How to Enable
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+filter.enableResultCrossVerification(EnumCapturedResultItemType.CRIT_BARCODE, true);
+mRouter.addResultFilter(filter);
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+filter.enableResultCrossVerification(EnumCapturedResultItemType.CRIT_BARCODE, true)
+mRouter?.addResultFilter(filter)
+```
+
+### Set Criteria
+
+- Frame Window: The number of frames used for cross verification. The default is 5.
+- Min Consistent Frames: The number of consistent frames required to pass cross verification. The default is 2.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+CrossVerificationCriteria criteria = new CrossVerificationCriteria();
+criteria.setFrameWindow(5);
+criteria.setMinConsistentFrames(3);
+filter.setResultCrossVerificationCriteria(EnumCapturedResultItemType.CRIT_BARCODE, criteria);
+```
+2.
+```kotlin
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+val criteria = CrossVerificationCriteria()
+criteria.setFrameWindow(5)
+criteria.setMinConsistentFrames(3)
+filter.setResultCrossVerificationCriteria(EnumCapturedResultItemType.CRIT_BARCODE, criteria)
+```
+
+## Overlapping
+
+### How to Enable
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE, true);
+mRouter.addResultFilter(filter);
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE, true)
+mRouter?.addResultFilter(filter)
+```
+
+### Maximum Overlapping Frames
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+filter.setMaxOverlappingFrames(EnumCapturedResultItemType.CRIT_BARCODE, 10);
+```
+2.
+```kotlin
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+filter.setMaxOverlappingFrames(EnumCapturedResultItemType.CRIT_BARCODE, 10)
+```
+
+## Deduplication
+
+### How to Enable
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE, true);
+mRouter.addResultFilter(filter);
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE, true)
+mRouter?.addResultFilter(filter)
+```
+
+### Set Duplicate Forget Time
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+filter.setDuplicateForgetTime(EnumCapturedResultItemType.CRIT_BARCODE, 5000);
+filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE, true);
+```
+2.
+```kotlin
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+filter.setDuplicateForgetTime(EnumCapturedResultItemType.CRIT_BARCODE, 5000)
+filter.enableResultDeduplication(EnumCapturedResultItemType.CRIT_BARCODE, true)
+```
diff --git a/programming/android/user-guide/capabilities/parse-drivers-license.md b/programming/android/user-guide/capabilities/parse-drivers-license.md
new file mode 100644
index 00000000..19a4d68e
--- /dev/null
+++ b/programming/android/user-guide/capabilities/parse-drivers-license.md
@@ -0,0 +1,138 @@
+---
+layout: default-layout
+title: Parse Drivers' License - Dynamsoft Barcode Reader Android
+description: Learn how to parse Drivers' License with Dynamsoft Barcode Reader Android.
+keywords: parse, Android, Drivers' License
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Parse Drivers License
+
+## How to Enable Drivers License Parsing
+
+1. Add code parser task.
+
+ ```json
+ "CodeParserTaskSettingOptions": [
+ {
+ "Name": "parse-drivers-license",
+ "CodeSpecifications": [
+ "AAMVA_DL_ID",
+ "AAMVA_DL_ID_WITH_MAG_STRIPE",
+ "SOUTH_AFRICA_DL"
+ ]
+ },
+ ]
+ ```
+
+2. Add semantic processing options and specify the target ROI to reference.
+
+ ```json
+ "SemanticProcessingOptions": [
+ {
+ "Name": "sp-drivers-license",
+ "ReferenceObjectFilter": {
+ "ReferenceTargetROIDefNameArray": [
+ "roi-drivers-license"
+ ]
+ },
+ "TaskSettingNameArray": [
+ "parse-drivers-license"
+ ]
+ },
+ ]
+ ```
+
+3. Add the semantic processing option names to your template.
+
+ ```json
+ "CaptureVisionTemplates": [
+ {
+ "Name": "ReadDriversLicense",
+ "ImageROIProcessingNameArray": [
+ "roi-drivers-license"
+ ],
+ "SemanticProcessingNameArray": [
+ "sp-drivers-license"
+ ]
+ }
+ ]
+ ```
+
+## How to Receive Parsed Results
+
+Receive the `ParsedResult` from the [`onParsedResultsReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) callback of `CapturedResultReceiver`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onParsedResultsReceived(@NonNull ParsedResult result) {
+ // Add your code to use the ParsedResult
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onParsedResultsReceived(result: ParsedResult) {
+ // Add your code to use the ParsedResult
+ }
+})
+```
+
+You can also receive the `ParsedResult` from the [`onCapturedResultReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) callback if you want to use the barcode result as well.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onCapturedResultReceived(@NonNull CapturedResult result) {
+ DecodedBarcodesResult decodedBarcodesResult = result.getDecodedBarcodesResult();
+ ParsedResult parsedResult = result.getParsedResult();
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onCapturedResultReceived(result: CapturedResult) {
+ val parsedResult = result.parsedResult
+ val decodedBarcodesResult = result.decodedBarcodesResult
+ }
+})
+```
+
+## Common Fields
+
+| Field Name | Description |
+| ---------- | ----------- |
+| CodeType | Code type, always has value "AAMVA_DL_ID" |
+| AAMVAVersionNumber | AAMVA Version Number |
+| fullName | Full name of cardholder |
+| lastName | Last name of cardholder |
+| givenName | Given name of cardholder |
+| firstName | First name of cardholder |
+| middleName | Middle name of cardholder |
+| street_1 | Street portion of the cardholder address |
+| street_2 | Second line of street portion of the cardholder address |
+| city | City portion of the cardholder address |
+| postalCode | Postal code portion of the cardholder address |
+| licenseNumber | License/ID Number |
+| vehicleClass | Jurisdiction-specific vehicle class / Driver License Classification Code |
+| expirationDate | Expiration Date |
+| birthDate | Date of Birth |
+| sex | Sex |
+| issuedDate | Date on which the document was issued |
+
+View more [Drivers License fields]({{ site.code_types }}aamva-dl-id.html).
diff --git a/programming/android/user-guide/capabilities/parse-gs1.md b/programming/android/user-guide/capabilities/parse-gs1.md
new file mode 100644
index 00000000..1e0ea312
--- /dev/null
+++ b/programming/android/user-guide/capabilities/parse-gs1.md
@@ -0,0 +1,144 @@
+---
+layout: default-layout
+title: Parse GS1 AI - Dynamsoft Barcode Reader Android
+description: Learn how to parse GS1 AI with Dynamsoft Barcode Reader Android.
+keywords: parse, Android, GS1 AI
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Parse GS1 AI
+
+## How to Enable GS1 AI Parsing
+
+1. Add code parser task.
+
+ ```json
+ "CodeParserTaskSettingOptions": [
+ {
+ "Name": "parse_gs1",
+ "CodeSpecifications": [
+ "GS1_AI"
+ ]
+ }
+ ]
+ ```
+
+2. Add semantic processing options and specify the target ROI to reference.
+
+ ```json
+ "SemanticProcessingOptions": [
+ {
+ "Name": "sp_gs1",
+ "ReferenceObjectFilter": {
+ "ReferenceTargetROIDefNameArray": [
+ "roi_read_gs1"
+ ]
+ },
+ "TaskSettingNameArray": [
+ "parse_gs1"
+ ]
+ }
+ ]
+ ```
+
+3. Add the semantic processing option names to your template.
+
+ ```json
+ "CaptureVisionTemplates": [
+ {
+ "Name": "ReadGS1AI",
+ "ImageROIProcessingNameArray": [
+ "roi_read_gs1"
+ ],
+ "SemanticProcessingNameArray": [
+ "sp_gs1"
+ ]
+ }
+ ]
+ ```
+
+## How to Receive Parsed Results
+
+Receive the `ParsedResult` from the [`onParsedResultsReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) callback of `CapturedResultReceiver`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onParsedResultsReceived(@NonNull ParsedResult result) {
+ // Add your code to use the ParsedResult
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onParsedResultsReceived(result: ParsedResult) {
+ // Add your code to use the ParsedResult
+ }
+})
+```
+
+You can also receive the `ParsedResult` from the [`onCapturedResultReceived`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) callback if you want to use the barcode result as well.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onCapturedResultReceived(@NonNull CapturedResult result) {
+ DecodedBarcodesResult decodedBarcodesResult = result.getDecodedBarcodesResult();
+ ParsedResult parsedResult = result.getParsedResult();
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onCapturedResultReceived(result: CapturedResult) {
+ val parsedResult = result.parsedResult
+ val decodedBarcodesResult = result.decodedBarcodesResult
+ }
+})
+```
+
+## Common Fields
+
+| Field Name | Description |
+| ---------- | ----------- |
+| CodeType | Code type, always has value `GS1_AI` |
+| 01 | Identification of a trade item (GTIN) |
+| 10 | Batch or lot number |
+| 11 | Production date |
+| 12 | Due date for amount on payment slip |
+| 13 | Packaging date |
+| 15 | Best before date |
+| 16 | Sell by date |
+| 17 | Expiration date |
+| 20 | Internal product variant |
+| 21 | Serial number |
+| 22 | Consumer product variant |
+| 30 | Variable count of items |
+| 310n | Net weight, kilograms |
+| 37 | Count of trade items or trade item pieces contained in a logistic unit |
+| 390n | Amount payable or coupon value - Single monetary area |
+| 391n | Amount payable and ISO currency code |
+| 392n | Amount payable for a variable measure trade item - Single monetary area |
+| 393n | Amount payable for a variable measure trade item and ISO currency code |
+| 394n | Percentage discount of a coupon |
+| 395n | Amount payable per unit of measure single monetary area |
+| 400 | Customer’s purchase order number |
+| 401 | Global Identification Number for Consignment (GINC) |
+| 402 | Global Shipment Identification Number (GSIN) |
+| 410 | Ship to - Deliver to Global Location Number (GLN) |
+
+View more [GS1 AI fields]({{ site.code_types }}gs1-ai.html).
diff --git a/programming/android/user-guide/capabilities/read-from-an-image.md b/programming/android/user-guide/capabilities/read-from-an-image.md
new file mode 100644
index 00000000..faab7192
--- /dev/null
+++ b/programming/android/user-guide/capabilities/read-from-an-image.md
@@ -0,0 +1,86 @@
+---
+layout: default-layout
+title: Read from an Image - Dynamsoft Barcode Reader Android
+description: Learn how to read barcodes from an image using the Dynamsoft Barcode Reader Android SDK.
+keywords: user guide, read from an image, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Read Barcodes from an Image
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+> [!Note]
+> Refer to the [DecodeFromAnImage sample](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/DecodeFromAnImage){:target="_blank"} for an example of decoding from the photo gallery.
+
+The `capture` methods of the `CaptureVisionRouter` class are designed to process a single image.
+
+```java
+CapturedResult capture(String filePath, String templateName) {}
+CapturedResult capture(byte[] fileBytes, String templateName) {}
+CapturedResult capture(Bitmap bitmap, String templateName) {}
+CapturedResult capture(ImageData imageData, String templateName) {}
+```
+
+## Supported Image Types
+
+The following image input types are supported:
+
+1. An image specified by file path.
+2. An image in memory (file bytes).
+3. `android.graphics.Bitmap`
+4. [com.dynamsoft.core.basic_structures.ImageData]({{ site.dcvb_android_api }}core/basic-structures/image-data.html)
+
+> [!Note]
+> When decoding with a file path, provide the full file path, including the extension. Supported extensions are ".bmp", ".jpg", ".png", ".gif", and single-page ".tiff".
+
+## How to Specify Template Name
+
+When using a `capture` method, `templateName` is required. You can specify either a preset template or a custom template name.
+
+### Use a Preset Template
+
+`EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST` is recommended when processing an image.
+
+```java
+CapturedResult capturedResult = mRouter.capture("Your-file-path",EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST);
+```
+
+### Use a Customized Template
+
+For details, see [Parameters and Settings - Use a Customized Template](init-customized-template.md).
+
+## Code Snippet
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CapturedResult capturedResult = mRouter.capture("Your file path",EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST);
+DecodedBarcodesResult decodedBarcodesResult = capturedResult.getDecodedBarcodesResult();
+BarcodeResultItem[] barcodeResultItems = decodedBarcodesResult.getItems();
+for(BarcodeResultItem barcodeResultItem: barcodeResultItems)
+{
+ String barcodeText = barcodeResultItem.getText();
+ String barcodeFormatString = barcodeResultItem.getFormatString();
+}
+```
+2.
+```kotlin
+val capturedResult = mRouter.capture("Your file path", EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST)
+val decodedBarcodesResult = capturedResult.decodedBarcodesResult
+val barcodeResultItems = decodedBarcodesResult.items
+for (barcodeResultItem in barcodeResultItems) {
+ val barcodeText = barcodeResultItem.text
+ val barcodeFormatString = barcodeResultItem.formatString
+}
+```
+
+- `CapturedResult`: The largest set of image processing results. `DecodedBarcodesResult` is one subset of `CapturedResult`.
+- `DecodedBarcodesResult`: The set of barcode results. It contains an array of `BarcodeResultItem` objects and additional information.
+- `BarcodeResultItem`: An object that represents a single decoded barcode.
diff --git a/programming/android/user-guide/capabilities/read-from-camera.md b/programming/android/user-guide/capabilities/read-from-camera.md
new file mode 100644
index 00000000..de0a3e06
--- /dev/null
+++ b/programming/android/user-guide/capabilities/read-from-camera.md
@@ -0,0 +1,141 @@
+---
+layout: default-layout
+title: Read from camera - Dynamsoft Barcode Reader Android
+description: Learn how to read barcodes from the camera using the Dynamsoft Barcode Reader Android SDK.
+keywords: user guide, read from camera, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Read from camera
+
+> [!Important]
+> This page is for **Foundational APIs** only. Refer to [Quick Start](../../user-guide.md) for how to scan from camera with `BarcodeScanner` component.
+
+Follow these three steps to read barcodes from the camera:
+
+1. Set input
+2. Register result receiver
+3. Start capturing
+
+## Set input
+
+### CameraEnhancer - Dynamsoft Standard Camera Input
+
+1. Add `CameraView` to your layout.
+
+ ```xml
+
+ ```
+
+2. Create a `CameraEnhancer` object and bind it to `CameraView`.
+
+
+ >- Java
+ >- Kotlin
+ >
+ >1.
+ ```java
+ CameraEnhancer mCamera;
+ CameraView cameraView = findViewById(R.id.camera_view);
+ mCamera = new CameraEnhancer(cameraView, this);
+ ```
+ 2.
+ ```kotlin
+ val cameraView: CameraView = findViewById(R.id.camera_view)
+ val mCamera = CameraEnhancer(cameraView, this)
+ ```
+
+3. Use `CaptureVisionRouter.setInput` to set the `CameraEnhancer` object as the input source.
+
+
+ >- Java
+ >- Kotlin
+ >
+ >1.
+ ```java
+ CaptureVisionRouter mRouter;
+ mRouter = new CaptureVisionRouter();
+ try {
+ mRouter.setInput(mCamera);
+ } catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+ }
+ ```
+ 2.
+ ```kotlin
+ val mRouter = CaptureVisionRouter()
+ try {
+ mRouter.setInput(mCamera)
+ } catch (e: CaptureVisionRouterException) {
+ throw RuntimeException(e)
+ }
+ ```
+
+### Other Camera Input
+
+> Note:
+> If you are using CameraX, refer to the [`DecodeWithCameraX`](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/DecodeWithCameraX) sample for camera input integration.
+
+To use another camera source, complete the following steps so the library can process the input:
+
+1. Receive the camera input.
+2. Convert the raw camera input to a `com.dynamsoft.core.basic_structures.ImageData` object.
+3. Use `addImageToBuffer` to add the `ImageData` object to the buffer.
+
+## Result receiver
+
+Use `CapturedResultReceiver` to receive capture results. The callback is triggered each time an image is processed, regardless of whether a barcode is decoded.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
+ }
+});
+```
+2.
+```kotlin
+mRouter.addResultReceiver(object : CapturedResultReceiver {
+ override fun onDecodedBarcodesReceived(result: DecodedBarcodesResult) {
+ }
+})
+```
+
+## Start capturing
+
+Use `startCapturing` and `stopCapturing` to control when barcode decoding starts and stops.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.startCapturing("ReadBarcodes_Default", new CompletionListener() {
+ @Override
+ public void onSuccess() {
+ }
+ @Override
+ public void onFailure(int errorCode, String errorString) {
+ }
+});
+```
+2.
+```kotlin
+mRouter.startCapturing("ReadBarcodes_Default", object : CompletionListener {
+ override fun onSuccess() {
+ }
+ override fun onFailure(errorCode: Int, errorString: String?) {
+ }
+})
+```
diff --git a/programming/android/user-guide/capabilities/read-specific-area.md b/programming/android/user-guide/capabilities/read-specific-area.md
new file mode 100644
index 00000000..9df4a9fc
--- /dev/null
+++ b/programming/android/user-guide/capabilities/read-specific-area.md
@@ -0,0 +1,156 @@
+---
+layout: default-layout
+title: Read from a Specific Area - Dynamsoft Barcode Reader Android
+description: Learn how to read from a specific area using the Dynamsoft Barcode Reader Android SDK.
+keywords: user guide, read specific area, Android, java, kotlin
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Read from a Specific Area
+
+## Set a Scan Region on Camera
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraView cameraView = findViewById(R.id.camera_view);
+CameraEnhancer mCamera = new CameraEnhancer(cameraView, this);
+try {
+ mCamera.setScanRegion(new DSRect(0.15f, 0.25f, 0.85f, 0.65f, true));
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val cameraView = findViewById(R.id.camera_view)
+val mCamera = CameraEnhancer(this)
+mCamera.scanRegion = DSRect(0.15f, 0.25f, 0.85f, 0.65f, true)
+```
+
+**Related APIs**
+
+- [`CameraEnhancer`]({{ site.dbr_android_api }}camera-enhancer/camera-enhancer.html)
+ - [`setScanRegion`]({{ site.dbr_android_api }}camera-enhancer/camera-enhancer.html#setscanregion)
+
+## Set an ROI via Simplified Settings
+
+> [!Important]
+> Simplified Settings are only available for the **Foundational APIs**.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+try {
+ SimplifiedCaptureVisionSettings captureVisionSettings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
+ Quadrilateral roiQuad = new Quadrilateral();
+ roiQuad.points[0] = new Point(15,30);
+ roiQuad.points[1] = new Point(85,30);
+ roiQuad.points[2] = new Point(85,70);
+ roiQuad.points[3] = new Point(15,70);
+ captureVisionSettings.roi = roiQuad;
+ captureVisionSettings.roiMeasuredInPercentage = true;
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, captureVisionSettings);
+} catch (CaptureVisionRouterException e) {
+ e.printStackTrace();
+}
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+try {
+ val captureVisionSettings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES)
+ val roiQuad = Quadrilateral()
+ roiQuad.points[0] = Point(15, 30)
+ roiQuad.points[1] = Point(85, 30)
+ roiQuad.points[2] = Point(85, 70)
+ roiQuad.points[3] = Point(15, 70)
+ captureVisionSettings.roi = roiQuad
+ captureVisionSettings.roiMeasuredInPercentage = true
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, captureVisionSettings)
+} catch (e: CaptureVisionRouterException) {
+ e.printStackTrace()
+}
+```
+
+## Set ROIs in Customized Template
+
+Define a single ROI:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "Name" : "CV_0",
+ "ImageROIProcessingNameArray": ["barcode-decoding-roi-1" ]
+ }
+ ],
+ "TargetROIDefOptions" : [
+ {
+ "Name" : "barcode-decoding-roi-1",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 30 ],
+ "SecondPoint" : [ 85, 30 ],
+ "ThirdPoint" : [ 85, 70 ],
+ "FourthPoint" : [ 15, 70 ],
+ }
+ }
+ }
+ ]
+}
+```
+
+You can define multiple ROIs in `TargetROIDefOptions`. For each ROI, you can assign a different task or reuse the same task.
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "Name" : "CV_0",
+ "ImageROIProcessingNameArray": ["barcode-decoding-roi-1","barcode-decoding-roi-2" ]
+ }
+ ],
+ "TargetROIDefOptions" : [
+ {
+ "Name" : "barcode-decoding-roi-1",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 20 ],
+ "SecondPoint" : [ 85, 40 ],
+ "ThirdPoint" : [ 85, 40 ],
+ "FourthPoint" : [ 15, 20 ]
+ }
+ }
+ },{
+ "Name" : "barcode-decoding-roi-2",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 60 ],
+ "SecondPoint" : [ 85, 80 ],
+ "ThirdPoint" : [ 85, 80 ],
+ "FourthPoint" : [ 15, 60 ]
+ }
+ }
+ }
+ ]
+}
+```
diff --git a/programming/android/user-guide/capabilities/receive-results.md b/programming/android/user-guide/capabilities/receive-results.md
new file mode 100644
index 00000000..8ec7a052
--- /dev/null
+++ b/programming/android/user-guide/capabilities/receive-results.md
@@ -0,0 +1,158 @@
+---
+layout: default-layout
+title: Receive Results - Dynamsoft Barcode Reader Android
+description: Learn how to receive captured results when using Dynamsoft Barcode Reader Android edition.
+keywords: Receive Results, Android
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Receive Results
+
+## Receive Results from CapturedResultReceiver
+
+If you only need barcode results, use `onDecodedBarcodesReceived`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
+ // Add your code to use the DecodedBarcodesResult
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onDecodedBarcodesReceived(result: DecodedBarcodesResult) {
+ // Add your code to use the DecodedBarcodesResult
+ }
+})
+```
+
+Likewise, in scenarios such as driver license parsing, you can get a `ParsedResult` directly from `onParsedResultsReceived`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onParsedResultsReceived(@NonNull ParsedResult result) {
+ // Add your code to use the ParsedResult
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onParsedResultsReceived(result: ParsedResult) {
+ // Add your code to use the ParsedResult
+ }
+})
+```
+
+If you need multiple result types at the same time, `onCapturedResultReceived` is more convenient.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.addResultReceiver(new CapturedResultReceiver() {
+ @Override
+ public void onCapturedResultReceived(@NonNull CapturedResult result) {
+ // You can get both ParsedResult and DecodedBarcodesResult
+ }
+});
+```
+2.
+```kotlin
+cvr.addResultReceiver(object: CapturedResultReceiver{
+ override fun onCapturedResultReceived(result: CapturedResult) {
+ // You can get both ParsedResult and DecodedBarcodesResult
+ val parsedResult = result.parsedResult
+ val decodedBarcodesResult = result.decodedBarcodesResult
+ }
+})
+```
+
+## Receive Results from Capture Methods
+
+The result is returned as a `CapturedResult` object when using `capture` methods. You can get the types you want from the `CapturedResult` object.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CapturedResult capturedResult = mRouter.capture("Your file path",EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST);
+DecodedBarcodesResult decodedBarcodesResult = capturedResult.getDecodedBarcodesResult();
+BarcodeResultItem[] barcodeResultItems = decodedBarcodesResult.getItems();
+for(BarcodeResultItem barcodeResultItem: barcodeResultItems)
+{
+ String barcodeText = barcodeResultItem.getText();
+ String barcodeFormatString = barcodeResultItem.getFormatString();
+}
+```
+2.
+```kotlin
+val capturedResult = mRouter.capture("Your file path", EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST)
+val decodedBarcodesResult = capturedResult.decodedBarcodesResult
+val barcodeResultItems = decodedBarcodesResult.items
+for (barcodeResultItem in barcodeResultItems) {
+ val barcodeText = barcodeResultItem.text
+ val barcodeFormatString = barcodeResultItem.formatString
+}
+```
+
+## Receive Results from IntermediateResultReceiver
+
+To use `IntermediateResultReceiver`, you need to get the `IntermediateResultManager` from `CaptureVisionRouter` first. Then, you can add result receiver to the `IntermediateResultManager` for receiving intermediate results.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+mRouter.getIntermediateResultManager().addResultReceiver(new IntermediateResultReceiver() {
+ @Override
+ public void onLocalizedBarcodesReceived(@NonNull LocalizedBarcodesUnit unit, IntermediateResultExtraInfo info) {
+ if (unit.getCount() != 0)
+ {
+ for (LocalizedBarcodeElement element: unit.getLocalizedBarcodes())
+ {
+ // LocalizedBarcodeElement is the basic element representing a localized barcode
+ // Add your code to use the LocalizedBarcodeElement
+ }
+ }
+ }
+});
+```
+2.
+```kotlin
+cvr.intermediateResultManager.addResultReceiver(object: IntermediateResultReceiver
+{
+ override fun onLocalizedBarcodesReceived(
+ unit: LocalizedBarcodesUnit,
+ info: IntermediateResultExtraInfo?
+ ) {
+ for (element: LocalizedBarcodeElement in unit.localizedBarcodes)
+ {
+ // LocalizedBarcodeElement is the basic element representing a localized barcode
+ // Add your code to use the LocalizedBarcodeElement
+ }
+ }
+})
+```
diff --git a/programming/android/user-guide/capabilities/scan-region-style.md b/programming/android/user-guide/capabilities/scan-region-style.md
new file mode 100644
index 00000000..114e1d91
--- /dev/null
+++ b/programming/android/user-guide/capabilities/scan-region-style.md
@@ -0,0 +1,90 @@
+---
+layout: default-layout
+title: Scan Region Style - Dynamsoft Barcode Reader Android
+description: Learn how to configure the scan region style for Dynamsoft Barcode Reader Android.
+keywords: scan region, style, Android
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Configure the Scan Region Style
+
+## Visibility
+
+After you call `setScanRegion`, the scan region is visible by default. You can hide it by calling `setScanRegionMaskVisible`.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+try {
+ mCamera.setScanRegion(new DSRect(0.15f, 0.25f, 0.85f, 0.65f, true));
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+cameraView.setScanRegionMaskVisible(false);
+```
+2.
+```kotlin
+try {
+ mCamera.setScanRegion(DSRect(0.15f, 0.25f, 0.85f, 0.65f, true))
+} catch (e: CameraEnhancerException) {
+ throw RuntimeException(e)
+}
+cameraView.setScanRegionMaskVisible(false)
+```
+
+## Scan Region Mask Style
+
+The scan region mask style includes the stroke color, stroke width, and mask color.
+
+
+
+
Scan Region Style
+
+
+1. Add your colors to `res/values/colors.xml`.
+
+```xml
+#FF03DAC5
+#2003DAC5
+```
+
+2. Set colors to the scan region mask style.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+int teal_200_transparent = ResourcesCompat.getColor(MainActivity.this.getResources(), R.color.teal_200_transparent, null);
+int teal_200 = ResourcesCompat.getColor(MainActivity.this.getResources(), R.color.teal_200, null);
+cameraView.setScanRegionMaskStyle(teal_200, teal_200_transparent, 2.0f);
+```
+2.
+```kotlin
+val teal_200_transparent = ResourcesCompat.getColor(this@MainActivity.getResources(), R.color.teal_200_transparent, null)
+val teal_200 = ResourcesCompat.getColor(this@MainActivity.getResources(), R.color.teal_200, null)
+cameraView.setScanRegionMaskStyle(teal_200, teal_200_transparent, 2.0f)
+```
+
+## Laser
+
+The scan laser is a light bar that moves up and down to indicate active scanning. It does not affect performance. It is hidden by default. When a scan region is set, the laser movement is limited to that region.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+cameraView.setScanLaserVisible(true);
+```
+2.
+```kotlin
+cameraView.setScanLaserVisible(true)
+```
diff --git a/programming/android/user-guide/capabilities/single-multiple.md b/programming/android/user-guide/capabilities/single-multiple.md
new file mode 100644
index 00000000..ed5d6352
--- /dev/null
+++ b/programming/android/user-guide/capabilities/single-multiple.md
@@ -0,0 +1,81 @@
+---
+layout: default-layout
+title: Scan Multiple Barcodes with BarcodeScanner - Dynamsoft Barcode Reader Android
+description: Use BarcodeScanner Android edition to scan multiple barcodes
+keywords: Multiple barcodes, Android
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Single & Multiple Barcode Scanning
+
+This article explains how to switch between single-barcode scanning mode and multi-barcode scanning mode.
+
+## Configure Expected Barcodes Count
+
+- `expectedBarcodesCount` = 1: Scan a single barcode.
+- `expectedBarcodesCount` = 0: Allows the library to return more than one result, but it does not aggressively optimize for decoding multiple barcodes.
+- `expectedBarcodesCount` = 999 or any other number: Makes every effort to decode up to the specified number of barcodes, when possible.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter;
+mRouter = new CaptureVisionRouter();
+try {
+ SimplifiedCaptureVisionSettings simplifiedCaptureVisionSettings = mRouter.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES);
+ SimplifiedBarcodeReaderSettings simplifiedBarcodeReaderSettings = simplifiedCaptureVisionSettings.barcodeSettings;
+ simplifiedBarcodeReaderSettings.expectedBarcodesCount = 1;
+ mRouter.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, simplifiedCaptureVisionSettings);
+} catch (CaptureVisionRouterException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+try {
+ val simplifiedCaptureVisionSettings = mRouter?.getSimplifiedSettings(EnumPresetTemplate.PT_READ_BARCODES)
+ val simplifiedBarcodeReaderSettings = simplifiedCaptureVisionSettings?.barcodeSettings
+ simplifiedBarcodeReaderSettings.expectedBarcodesCount = 1
+ mRouter?.updateSettings(EnumPresetTemplate.PT_READ_BARCODES, simplifiedCaptureVisionSettings)
+} catch (e: CaptureVisionRouterException) {
+ throw RuntimeException(e)
+}
+```
+
+**Related APIs**
+
+- [`simplifiedCaptureVisionSettings`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html)
+- [`simplifiedBarcodeReaderSettings`]({{ site.dbr_android_api }}simplified-barcode-reader-settings.html)
+
+## Improve Multi-Scan Stability
+
+Use max overlapping feature of multi-frame cross filter to improve the stability of multi-barcode scanning.
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CaptureVisionRouter mRouter = new CaptureVisionRouter();
+MultiFrameResultCrossFilter filter = new MultiFrameResultCrossFilter();
+// Default value of MaxOverlapingFrames is 5. Increase the number if you want to further improve the stability.
+filter.setMaxOverlappingFrames(EnumCapturedResultItemType.CRIT_BARCODE, 10);
+filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE, true);
+mRouter.addResultFilter(filter);
+```
+2.
+```kotlin
+val mRouter: CaptureVisionRouter? = CaptureVisionRouter()
+val filter: MultiFrameResultCrossFilter = MultiFrameResultCrossFilter()
+// Default value of MaxOverlapingFrames is 5. Increase the number if you want to further improve the stability.
+filter.setMaxOverlappingFrames(EnumCapturedResultItemType.CRIT_BARCODE, 10)
+filter.enableLatestOverlapping(EnumCapturedResultItemType.CRIT_BARCODE, true)
+mRouter?.addResultFilter(filter)
+```
diff --git a/programming/android/user-guide/capabilities/zoom-control.md b/programming/android/user-guide/capabilities/zoom-control.md
new file mode 100644
index 00000000..7f65c26c
--- /dev/null
+++ b/programming/android/user-guide/capabilities/zoom-control.md
@@ -0,0 +1,70 @@
+---
+layout: default-layout
+title: Zoom Control for BarcodeScanner - Dynamsoft Barcode Reader Android
+description: Learn how to configure zoom control for BarcodeScanner on Android, including auto-zoom and zoom factor.
+keywords: BarcodeScanner, scanner, Android, auto-zoom, zoom
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Zoom Control
+
+Zoom control is commonly used when processing small barcodes or scanning from a long distance. There are two zoom control features:
+
+- Auto-zoom: Lets the library determine whether to zoom in.
+- Zoom factor: Lets you set the zoom factor directly. This is commonly used when focusing on small barcodes.
+
+## Auto Zoom
+
+Enable auto-zoom so the camera can zoom in automatically.
+
+
+
+
Auto Zoom
+
+
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraEnhancer mCamera = new CameraEnhancer(this);
+try {
+ mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_AUTO_ZOOM);
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+```
+2.
+```kotlin
+val mCamera = CameraEnhancer(this)
+mCamera.enableEnhancedFeatures(EnumEnhancerFeatures.EF_AUTO_ZOOM)
+```
+
+**Related API**
+
+- [`enableEnhancedFeatures`]({{ site.dce_android }}primary-api/camera-enhancer.html#enableenhancedfeatures)
+
+## Zoom Factor
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraEnhancer mCamera = new CameraEnhancer(this);
+mCamera.setZoomFactor(2.0f);
+```
+2.
+```kotlin
+val mCamera = CameraEnhancer(this)
+mCamera.zoomFactor = 2.0f
+```
+
+**Related API**
+
+- [`setZoomFactor`]({{ site.dce_android }}primary-api/camera-enhancer.html#setzoomfactor)
diff --git a/programming/android/user-guide/concept/capture-vision-architecture.md b/programming/android/user-guide/concept/capture-vision-architecture.md
new file mode 100644
index 00000000..d9b6e316
--- /dev/null
+++ b/programming/android/user-guide/concept/capture-vision-architecture.md
@@ -0,0 +1,99 @@
+---
+layout: default-layout
+title: Dynamsoft Capture Vision Architecture
+description: The introduction of Dynamsoft Capture Vision Architecture for Android.
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: false
+---
+
+# Core Concepts
+
+This page provides a high-level overview of the underlying architecture and data flow of the Dynamsoft Barcode Reader SDK. Understanding these concepts will help you efficiently configure the SDK for various scanning scenarios.
+
+## Capture Vision Architecture
+
+How CVR coordinate Works
+
+
+
+
+
+- Fetch images from the camera or file folder.
+- Load and apply settings (or templates).
+- Coordinate tasks and invoke the Functional Modules required for each task.
+- Distribute captured results.
+
+## Image Source
+
+`ImageSourceAdapter` is the standard input for Capture Vision architecture. Once the capture process starts, CVR continuously acquires image data from the `ImageSourceAdapter` until the capture process is stopped or the image source is exhausted.
+
+You can directly use the implementations provided by Dynamsoft:
+
+- Camera: `CameraEnhancer`
+- File/Directory: `DirectoryFetcher`
+
+You can also create a custom `ImageSourceAdapter`. For example, see [use cameraX to implement ImageSourceAdapter](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/DecodeWithCameraX){:target="_blank"}.
+
+## Templates, Settings
+
+For each input image, the tasks to be executed and the algorithms used by each task are controlled by a template. Settings are a commonly used subset of template configuration options.
+
+When starting a capture process, you must specify a valid template name. You can use either a `Preset Template` or a `Customized Template`.
+
+- `Preset Template`: The preset templates for you to quickly access.
+- `Customized Template`: If you are not satisfied with the current performance, you can contact us for full customization. You will then receive a customized template.
+
+## Functional Modules
+
+Functional modules are the core components of the product. CVR invokes the required functional modules based on the tasks you configure. The available functional modules include:
+
+- `DynamsoftBarcodeReader`: Reads various types of barcodes. See all [supported barcode formats](../../api-reference/enum/barcode-format.md).
+- `DynamsoftCodeParser`: Parses the text content of recognized results, such as driver's licenses and GS1 AI data.
+
+A valid license is required to activate these functional modules.
+
+## Result Receivers
+
+### Standard Output - Captured Results
+
+`CapturedResult` is the standard output of Dynamsoft Capture Vision. It contains all results generated during image processing, including barcode results, parsed results, and other captured data.
+
+`BarcodeResultItem` represents a single detected barcode and contains the complete information for that barcode. If multiple barcodes are recognized in a single scan, the barcode result will contain multiple `BarcodeResultItem` objects.
+
+
+
+| Example BarcodeResultItem | |
+| ----------------- | -- |
+| `format` | 67108864 |
+| `formatString` | QR_CODE |
+| `text` | www.dynamsoft.com |
+| `bytes` | [119],[119],[119],[46],[100],[121],...... |
+| `location` | Point(196, 1101), Point(518, 1000),...... |
+| `confidence` | 86 |
+| `angle` | 345 |
+| `moduleSize` | 10 |
+| `isDPM` | FALSE |
+| `isMirrored` | FALSE |
+| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
+
+### Advanced Output - Intermediate Results
+
+From the beginning of image processing to the generation of a `CapturedResult`, the algorithm goes through multiple stages. The output produced at each stage is called an intermediate result.
+
+Intermediate results are useful for the following purposes:
+
+1. Algorithm tuning: By examining intermediate results, you can identify how to optimize the algorithm. For example, you can evaluate barcode region quality in `BinaryImageUnit` to adjust `BinarizationModes`, or inspect `LocalizedBarcodesUnit` to refine `LocalizationModes`.
+2. Debugging: By reviewing the output of each stage, you can locate the stage where a problem occurs and determine whether the issue comes from the template configuration or your code.
+3. Customization: You can implement custom processing logic based on intermediate results without modifying the SDK itself.
+
+The intermediate results related to barcode decoding include:
+
+| Stage | Intermediate Results | Description |
+|-------|----------------------|-------------|
+| BinarizeImageStage | `BinaryImageUnit` | The quality of binary image determines the localization accuracy. |
+| LocalizeCandidateBarcodesStage | `LocalizedBarcodesUnit` | The localized barcodes. |
+| ResistDeformationStage | `DeformationResistedBarcodeImageUnit` | The barcode image processed by `DeformationResistingModes`. |
+| ComplementBarcodeStage | `ComplementedBarcodeImageUnit` | The barcode image processed by `BarcodeComplementModes`. |
+| ScaleBarcodeImageStage | `ScaledBarcodeImageUnit` | The scaled barcode image processed by `BarcodeScaleModes`. |
+| DecodeBarcodesStage | `DecodedBarcodesUnit` | The decoded barcodes. |
diff --git a/programming/android/user-guide/explore-features/index.md b/programming/android/user-guide/explore-features/index.md
index bb2f0360..56c904e5 100644
--- a/programming/android/user-guide/explore-features/index.md
+++ b/programming/android/user-guide/explore-features/index.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Explore Features - Dynamsoft Barcode Reader for Android User Guide
+title: Explore Features - Dynamsoft Barcode Reader Android
description: This page lists the topics to explore the features of Dynamsoft Barcode Reader Android SDK.
keywords: user guide, explore features, Android, java, kotlin
breadcrumbText: Explore Features
diff --git a/programming/android/user-guide/index.md b/programming/android/user-guide/index.md
index 0d8ef81b..ddc02fa0 100644
--- a/programming/android/user-guide/index.md
+++ b/programming/android/user-guide/index.md
@@ -9,34 +9,48 @@ needGenerateH3Content: true
needAutoGenerateSidebar: true
---
-# Dynamsoft Barcode Reader Android Edition User Guide
+# Get Started
+
+Choose one of the two guides below based on your development goal.
+
+
-These articles will help you get the most out of Dynamsoft Barcode Reader Android Edition.
-
-## Build Your APP with the BarcodeScanner APIs
-
-Develop a barcode scanner by using the ready-to-use UI, `BarcodeScannerActivity`.
-
-- [Build your First APP](../user-guide.md)
-- [Configure your barcode scanner](configure-barcode-scanner.md)
- - [Specify Barcode Formats](scanner-barcode-formats.md)
- - [Switch Single & Multiple Scanning Modes](scanner-multi-barcodes.md)
- - [Improve the Performance](scanner-improve-performance.md)
- - [Customize Scanner UI](scanner-customize-ui.md)
- - [Add Additional Settings](scanner-additional-settings.md)
-
-## Build Your APP with Foundational API
-
-High-level customization is available via the foundational APIs. These samples show you how to access the full feature of the foundational DynamsoftBarcodeReader SDK.
-
-- [Build your APP with foundational APIs](../foundational-guide.md).
-- [Explore Features](explore-features/index.md)
-
-## Develop for Other Platforms
+---
-These links will help you for developments on other platforms.
+## Which one should I choose?
-- [Getting Started with iOS](https://www.dynamsoft.com/barcode-reader/docs/mobile/programming/objectivec-swift/?ver=latest){:target="_blank"}
-- [Getting Started with MAUI](https://www.dynamsoft.com/capture-vision/docs/programming/maui/?ver=latest){:target="_blank"}
-- [Getting Started with React Native](https://www.dynamsoft.com/capture-vision/docs/programming/react-native/?ver=latest){:target="_blank"}
-- [Getting Started with Flutter](https://www.dynamsoft.com/capture-vision/docs/programming/flutter/?ver=latest){:target="_blank"}
+- Choose **Quick Start** for evaluation and fast barcode scanning setup.
+- Choose **Full-Feature Development** for production apps and full workflow control.
diff --git a/programming/android/user-guide/quick-performance-settings.md b/programming/android/user-guide/quick-performance-settings.md
index b7034436..82f632d4 100644
--- a/programming/android/user-guide/quick-performance-settings.md
+++ b/programming/android/user-guide/quick-performance-settings.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: Optimize Performance - Dynamsoft Barcode Reader Android Edition
-description: This is the Optimize Performance page of Dynamsoft Barcode Reader for Android SDK.
+description: This is the Optimize Performance page of Dynamsoft Barcode Reader Android SDK.
keywords: Guide, Optimize Performance
needAutoGenerateSidebar: true
needGenerateH3Content: true
diff --git a/programming/android/user-guide/scanner-additional-settings.md b/programming/android/user-guide/scanner-additional-settings.md
index c1cccf0d..172585cf 100644
--- a/programming/android/user-guide/scanner-additional-settings.md
+++ b/programming/android/user-guide/scanner-additional-settings.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Additional Settings for BarcodeScanner - Dynamsoft Barcode Reader for Android
+title: Additional Settings for BarcodeScanner - Dynamsoft Barcode Reader Android
description: Add additional settings for BarcodeScanner on Android platform. Including auto-zoom, beep, etc.
keywords: BarcodeScanner, scanner, Android, auto-zoom, zoom, beep
needAutoGenerateSidebar: true
diff --git a/programming/android/user-guide/scanner-barcode-formats.md b/programming/android/user-guide/scanner-barcode-formats.md
index a85ff403..5cca2e3e 100644
--- a/programming/android/user-guide/scanner-barcode-formats.md
+++ b/programming/android/user-guide/scanner-barcode-formats.md
@@ -1,35 +1,88 @@
---
layout: default-layout
-title: Specify barcode formats for BarcodeScanner - Dynamsoft Barcode Reader for Android
-description: "Learn how to use Dynamsoft Barcode Reader Android features with practical setup guidance, workflow tips, and examples for building reliable capture apps."
-keywords: BarcodeScanner, scanner, Android, barcode formats
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
+title: Barcode Formats - Dynamsoft Barcode Reader Android
+description: Learn how to configure barcode formats in the Dynamsoft Barcode Reader Android SDK.
+keywords: barcode formats, Android, java, kotlin
noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
---
-# Specify Barcode Formats
+# Configure Barcode Formats
+
+There are two ways to configure barcode formats:
+
+- Configure formats in code.
+- Configure formats together with other settings in the template.
-Set the supported barcode format is always the first step when configuring the BarcodeScanner. You can specify the barcode format via the method `setBarcodeFormats`.
+## Configure Formats in Your Code
-**Code Snippet**
+Specify barcode formats using a combined value of [`EnumBarcodeFormat`]({{ site.dbr_android_api }}enum/barcode-format.html).
+
+- Use bitwise OR (`|`) to combine multiple formats.
+- `EnumBarcodeFormat.BF_DEFAULT` includes all common formats (`BF_ONED`, `BF_GS1_DATABAR`, `BF_PDF417`, `BF_QR_CODE`, `BF_DATAMATRIX`, `BF_AZTEC`, `BF_MAXICODE`, `BF_MICRO_QR`, `BF_MICRO_PDF417`, and `BF_GS1_COMPOSITE`).
+- Use `EnumBarcodeFormat.BF_ALL` to enable all supported formats.
+- Use group values like `EnumBarcodeFormat.BF_ONED` when appropriate.
+
+Example:
-
->- Java
->- Kotlin
->
->1.
```java
BarcodeScannerConfig config = new BarcodeScannerConfig();
-config.setBarcodeFormats(EnumBarcodeFormat.BF_ONED | EnumBarcodeFormat.BF_QR_CODE);
+// QR Code + DataMatrix
+config.setBarcodeFormats(EnumBarcodeFormat.BF_QR_CODE | EnumBarcodeFormat.BF_DATAMATRIX);
```
-2.
-```kotlin
-val config = BarcodeScannerConfig().apply {
- barcodeFormats = EnumBarcodeFormat.BF_ONED or EnumBarcodeFormat.BF_QR_CODE
+
+## Configure Formats in a Template
+
+Barcode formats are specified in `BarcodeFormatIds` under `BarcodeReaderTaskSettingOptions`. For example:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "ImageROIProcessingNameArray": [ "ROI_2D" ],
+ "Name": "ReadCommon2D",
+ }
+ ],
+ "TargetROIDefOptions": [
+ {
+ "Name": "ROI_2D",
+ "TaskSettingNameArray": [ "Task_2D" ]
+ }
+ ],
+ "BarcodeReaderTaskSettingOptions": [
+ {
+ "Name": "Task_2D",
+ "BarcodeFormatIds": [ "BF_QR_CODE", "BF_DATAMATRIX", "BF_PDF417", "BF_MAXICODE" ],
+ "SectionArray": [
+ {
+ "Section": "ST_BARCODE_LOCALIZATION",
+ "ImageParameterName": "ip"
+ },
+ {
+ "Section": "ST_BARCODE_DECODING",
+ "ImageParameterName": "ip"
+ }
+ ]
+ }
+ ],
+ "ImageParameterOptions": [
+ {
+ "Name": "ip"
+ }
+ ]
}
```
-**Related APIs**
+For common formats, you can download and use the preset templates below:
-- [`setBarcodeFormats`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setbarcodeformats)
+| Barcode Format(s) | Template |
+| ----------------- | -------- |
+| EAN13, EAN8, UPC_A, UPC_E, GS1 Databar | [ReadOneDRetail.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadOneDRetail.json) |
+| Code128, Code39, ITF, Codabar, MSI Code | [ReadOneDIndustrial.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadOneDIndustrial.json) |
+| QR Code | [ReadQR.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadQR.json) |
+| Data Matrix | [ReadDataMatrix.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadDataMatrix.json) |
+| PDF417 | [ReadPDF417.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadPDF417.json) |
+| Aztec | [ReadAztec.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadAztec.json) |
+| QR Code, Data Matrix, PDF417 | [ReadCommon2D.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadCommon2D.json) |
+| DotCode | [ReadDotCode.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/android/BarcodeScannerAPISamples/ScenarioOptimizedScanning/src/main/assets/Templates/ReadDotCode.json) |
diff --git a/programming/android/user-guide/scanner-customize-ui.md b/programming/android/user-guide/scanner-customize-ui.md
index 68c4da0a..8ad49204 100644
--- a/programming/android/user-guide/scanner-customize-ui.md
+++ b/programming/android/user-guide/scanner-customize-ui.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Customize the UI of BarcodeScanner - Dynamsoft Barcode Reader for Android
+title: Customize the UI of BarcodeScanner - Dynamsoft Barcode Reader Android
description: Customize the UI of BarcodeScanner on Android platform.
keywords: BarcodeScanner, scanner, Android, scan region, torch button, close button, scan laser
needAutoGenerateSidebar: true
@@ -10,6 +10,14 @@ noTitleIndex: true
# Configure the UI Elements
+| Available UI Element|
+| ------------------- |
+| Scan region |
+| Scan Laser |
+| Torch button |
+| Camera toggle button |
+| Close button (BarcodeScanner API only) |
+
BarcodeScanner provides a set of UI elements that can be easily customized.
@@ -19,8 +27,12 @@ BarcodeScanner provides a set of UI elements that can be easily customized.
- Close button: Stop barcode scanning and go back to the previous activity.
- Scan Region: Set a region of interest so that the algorithm focus on this region only. It can sharpenly improve the processing speed. For some special barcode types like DotCode the scan region improves the read-rate as well.
-- Torch button: A clickable button that can turn on/off the torch.
- Scan Laser: A line that moving up and down. Its moving area is limited in the scan region.
+- Torch button: A clickable button that can turn on/off the torch.
+
+## Scan Region & Scan Laser
+
+### Configure with BarcodeScanner APIs
>- Java
@@ -31,27 +43,107 @@ BarcodeScanner provides a set of UI elements that can be easily customized.
BarcodeScannerConfig config = new BarcodeScannerConfig();
// Margin left 15%, margin top 30%, margin right 85%, margin bottom 70%
config.setScanRegion(new DSRect(0.15f, 0.25f, 0.85f, 0.65f, true));
-config.setTorchButtonVisible(true);
-config.setCloseButtonVisible(true);
config.setScanLaserVisible(true);
-config.setCameraToggleButtonVisible(true);
```
2.
```kotlin
val config = BarcodeScannerConfig().apply {
// Margin left 15%, margin top 30%, margin right 85%, margin bottom 70%
scanRegion = DSRect(0.15f, 0.3f, 0.85f, 0.7f, true)
+ scanLaserVisible = true
+}
+```
+
+**Related APIs**
+
+- [`BarcodeScannerConfig`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html)
+ - [`setScanRegion`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setscanregion)
+ - [`setScanLaserVisible`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setscanlaservisible)
+
+### Configure with Foundational APIs
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraView cameraView = findViewById(R.id.camera_view);
+CameraEnhancer mCamera = new CameraEnhancer(cameraView, this);
+try {
+ mCamera.setScanRegion(new DSRect(0.15f, 0.25f, 0.85f, 0.65f, true));
+} catch (CameraEnhancerException e) {
+ throw new RuntimeException(e);
+}
+cameraView.setScanLaserVisible(true);
+```
+2.
+```kotlin
+val cameraView = findViewById(R.id.camera_view)
+val mCamera = CameraEnhancer(this)
+mCamera.scanRegion = DSRect(0.15f, 0.25f, 0.85f, 0.65f, true)
+cameraView.isScanLaserVisible = true
+```
+
+**Related APIs**
+
+- [`CameraEnhancer`]({{ site.dbr_android_api }}camera-enhancer/camera-enhancer.html)
+ - [`setScanRegion`]({{ site.dbr_android_api }}camera-enhancer/camera-enhancer.html#setscanregion)
+- [`CameraView`]({{ site.dce_android }}auxiliary-api/dcecameraview.html)
+ - [`setScanLaserVisible`]({{ site.dce_android }}auxiliary-api/dcecameraview.html#setscanlaservisible)
+
+## Buttons
+
+### Add Buttons with BarcodeScanner APIs
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+BarcodeScannerConfig config = new BarcodeScannerConfig();
+config.setTorchButtonVisible(true);
+config.setCloseButtonVisible(true);
+config.setCameraToggleButtonVisible(true);
+```
+2.
+```kotlin
+val config = BarcodeScannerConfig().apply {
torchButtonVisible = true
closeButtonVisible = true
- scanLaserVisible = true
cameraToggleButtonVisible = true
}
```
**Related APIs**
-- [`setScanRegion`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setscanregion)
-- [`setTorchButtonVisible`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#settorchbuttonvisible)
-- [`setScanLaserVisible`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setscanlaservisible)
-- [`setCloseButtonVisible`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setclosebuttonvisible)
-- [`setCameraToggleButtonVisible`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setcameratogglebuttonvisible)
+- [`BarcodeScannerConfig`]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html)
+ - [setTorchButtonVisible]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#settorchbuttonvisible)
+ - [setCloseButtonVisible]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setclosebuttonvisible)
+ - [setCameraToggleButtonVisible]({{ site.dbr_android_api }}barcode-scanner/barcode-scanner-config.html#setcameratogglebuttonvisible)
+
+### Add Buttons with Foundational APIs
+
+
+>- Java
+>- Kotlin
+>
+>1.
+```java
+CameraView cameraView = findViewById(R.id.camera_view);
+cameraView.setTorchButtonVisible(true);
+cameraView.setCameraToggleButtonVisible(true);
+```
+2.
+```kotlin
+val cameraView = findViewById(R.id.camera_view)
+cameraView.torchButtonVisible = true
+cameraView.cameraToggleButtonVisible = true
+```
+
+**Related APIs**
+
+- [`cameraView`]({{ site.dce_android }}auxiliary-api/dcecameraview.html)
+ - [setTorchButtonVisible]({{ site.dce_android }}auxiliary-api/dcecameraview.html#settorchbuttonvisible)
+ - [setCameraToggleButtonVisible]({{ site.dce_android }}auxiliary-api/dcecameraview.html#setcameratogglebuttonvisible)
diff --git a/programming/android/user-guide/scanner-improve-performance.md b/programming/android/user-guide/scanner-improve-performance.md
index 0d401bb2..fae22d35 100644
--- a/programming/android/user-guide/scanner-improve-performance.md
+++ b/programming/android/user-guide/scanner-improve-performance.md
@@ -1,11 +1,12 @@
---
layout: default-layout
-title: Improve the Performance of BarcodeScanner - Dynamsoft Barcode Reader for Android
+title: Improve the Performance of BarcodeScanner - Dynamsoft Barcode Reader Android
description: Improve the performance of BarcodeScanner on Android platform.
keywords: BarcodeScanner, scanner, Android, template file
needAutoGenerateSidebar: true
needGenerateH3Content: true
noTitleIndex: true
+ignore: true
---
# Improve the Performance of BarcodeScanner
diff --git a/programming/android/user-guide/scanner-multi-barcodes.md b/programming/android/user-guide/scanner-multi-barcodes.md
index ff2b63a9..13124a97 100644
--- a/programming/android/user-guide/scanner-multi-barcodes.md
+++ b/programming/android/user-guide/scanner-multi-barcodes.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Scan Multiple Barcodes with BarcodeScanner - Dynamsoft Barcode Reader for Android
+title: Scan Multiple Barcodes with BarcodeScanner - Dynamsoft Barcode Reader Android
description: Use BarcodeScanner Android edition to scan multiple barcodes
keywords: Multiple barcodes, Android
needAutoGenerateSidebar: true
diff --git a/programming/android/user-guide/ui-configurations.md b/programming/android/user-guide/ui-configurations.md
index a66b2d6c..9a39338c 100644
--- a/programming/android/user-guide/ui-configurations.md
+++ b/programming/android/user-guide/ui-configurations.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: UI Configurations - Dynamsoft Barcode Reader for Android
+title: UI Configurations - Dynamsoft Barcode Reader Android
description: Learn how to add basic UI elements on the DCECameraView for Android edition.
keywords: UI Configurations, Android
needAutoGenerateSidebar: true
diff --git a/programming/android/user-guide/understand-barcode-results.md b/programming/android/user-guide/understand-barcode-results.md
deleted file mode 100644
index 2bd88839..00000000
--- a/programming/android/user-guide/understand-barcode-results.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-layout: default-layout
-title: Understand Barcode Results - Dynamsoft Barcode Reader for Android
-description: Understand the structure of the barcode decoding results of Dynamsoft Barcode Reader Android.
-keywords: understand results, Android
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
-noTitleIndex: true
----
-
-# Understanding Barcode Results
-
-`DecodedBarcodesResult` is the barcode-type result returned by the Dynamsoft Barcode Reader SDK. It represents all barcode-related information captured from a single image or video frame.
-
-It contains:
-
-- All decoded barcodes.
-- Metadata about the original image.
-- Error information when a failure occurs.
-- A rotation transformation matrix if the original image includes rotation info.
-
-```java
-mRouter.addResultReceiver(new CapturedResultReceiver() {
- @Override
- public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
- if (result.getItems().length!=0)
- {
- for(BarcodeResultItem item:result.getItems())
- {
- String barcodeText = barcodeResultItem.getText();
- String barcodeFormatString = barcodeResultItem.getFormatString();
- }
- }
- }
-});
-```
-
-## How to Use
-
-### Check Error Messages
-
-Error messages are typically caused by:
-
-- The barcode reading task is not working properly.
-- The operation timeout.
-
-```java
-mRouter.addResultReceiver(new CapturedResultReceiver() {
- @Override
- public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
- if (result.getErrorCode()!= EnumErrorCode.EC_OK)
- {
- // Handle the error.
- }
- }
-});
-```
-
-> [!Note]
-> You might still receive barcode results even when the error message is not empty.
-
-### Access decoded barcodes
-
-Each decoded barcode is a `BarcodeResultItem` from `result.getBarcodes`. The following is an example:
-
-
-
-| BarcodeResultItem | |
-| ----------------- | -- |
-| `format` | 67108864 |
-| `formatString` | QR_CODE |
-| `text` | www.dynamsoft.com |
-| `bytes` | [119],[119],[119],[46],[100],[121],...... |
-| `location` | Point(196, 1101), Point(518, 1000),...... |
-| `confidence` | 86 |
-| `angle` | 345 |
-| `moduleSize` | 10 |
-| `isDPM` | FALSE |
-| `isMirrored` | FALSE |
-| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
-
-### Common fields to use
-
-- `text`: The decoded string. This is the most common field used for downstream processing.
-- `formatString`: The barcode symbology (for example, `QR_CODE`, `EAN_13`).
-- `bytes`: Raw payload bytes. By default, barcode text is interpreted using ISO-8859-1. Use this when the payload contains binary data or requires custom decoding.
-- `location`: Corner points of the barcode in the image, useful for drawing overlays.
-- `confidence`: A confidence score. Higher values indicate more reliable decoding.
-- `details`: Symbology-specific details (varies by barcode type).
-
-### Access the Original Image
-
-The original image is not returned by default. In `onDecodedBarcodesReceived`, you receive the original image `HashId`. Use it to fetch the image when needed.
-
-**Code Snippet**
-
-```java
-mRouter.addResultReceiver(new CapturedResultReceiver() {
- @Override
- public void onDecodedBarcodesReceived(@NonNull DecodedBarcodesResult result) {
- ImageData originalImage = mRouter.getIntermediateResultManager().getOriginalImage(result.getOriginalImageHashId());
- }
-});
-```
-
-> [!Note]
-> Use `originalImage` within the lifecycle of each `onDecodedBarcodesReceived` callback. Otherwise, it may be released or replaced by a newer image.
-
-**Related APIs**
-
-- [`getOriginalImageHashId`]({{ site.dbr_android_api }}decoded-barcodes-result.html)
-- [`getIntermediateResultManager`]({{ site.dcvb_android_api }}capture-vision-router/intermediate-result.html#getintermediateresultmanager)
-- [`getOriginalImage`]({{ site.dcvb_android_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html#getoriginalimage)
-
-## Explore Result Details
-
-This page provides a high-level overview of barcode scan results. For detailed usage and advanced scenarios, see:
-
-- [Get barcode confidence and rotation]({{ site.features }}get-confidence-rotation.html?lang=android)
-- [Get barcode location]({{ site.features }}get-barcode-location.html?lang=android)
-- [Get detailed barcode information]({{ site.features }}get-detailed-info.html?lang=android)
-- [Filter and sort decoding results]({{ site.features }}filter-and-sort.html?lang=android)
diff --git a/programming/android/user-guide/understand-barcode-scan-results.md b/programming/android/user-guide/understand-barcode-scan-results.md
deleted file mode 100644
index 1356e342..00000000
--- a/programming/android/user-guide/understand-barcode-scan-results.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-layout: default-layout
-title: Understand Barcode Results - Dynamsoft Barcode Reader for Android
-description: Understand the structure of the barcode decoding results of Dynamsoft Barcode Reader Android.
-keywords: understand results, Android
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
-noTitleIndex: true
----
-
-# Understanding Barcode Scan Results
-
-`BarcodeScanResult` is the object returned by the `onScanResult` callback when a scanning session finishes, is canceled, or encounters an error. Every `BarcodeScanResult` contains a `resultStatus` and a list of barcodes.
-The barcode list is non-empty only when `resultStatus` is `RS_FINISHED`.
-
-```java
-launcher = registerForActivityResult(
- new BarcodeScannerActivity.ResultContract(),
- result -> {
- // User code for using the scan result.
- }
-);
-```
-
-## How to Use
-
-### Check Status and Error Messages
-
-Always check `resultStatus` before accessing the decoded barcodes.
-
-- `RS_FINISHED`: Scanning completed successfully. At least one barcode is available.
-- `RS_CANCELED` / `RS_EXCEPTION`: No barcodes are returned.
-
-`RS_EXCEPTION` might be caused by:
-
-- You configured an invalid or expired license via `setLicense`.
-- You configured an invalid template via `setTemplateFile`.
-
-### Access decoded barcodes
-
-Each decoded barcode is a `BarcodeResultItem` from `result.getBarcodes()`. The following is an example of a `BarcodeResultItem`:
-
-
-
-| BarcodeResultItem | |
-| ----------------- | -- |
-| `format` | 67108864 |
-| `formatString` | QR_CODE |
-| `text` | www.dynamsoft.com |
-| `bytes` | [119],[119],[119],[46],[100],[121],...... |
-| `location` | Point(196, 1101), Point(518, 1000),...... |
-| `confidence` | 86 |
-| `angle` | 345 |
-| `moduleSize` | 10 |
-| `isDPM` | FALSE |
-| `isMirrored` | FALSE |
-| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
-
-### Common fields to use
-
-- `text`: The decoded string. This is the most common field used for downstream processing.
-- `formatString`: The barcode symbology (for example, `QR_CODE`, `EAN_13`).
-- `bytes`: Raw bytes of the barcode payload. By default, barcode text is interpreted using ISO-8859-1. Use this field when the payload contains binary data or requires custom decoding.
-- `location`: Corner points of the barcode in the image, useful for drawing overlays.
-- `confidence`: A confidence score. Higher values indicate more reliable decoding.
-- `details`: Symbology-specific details (varies by barcode type).
-
-## Explore Result Details
-
-This page provides a high-level overview of barcode scan results.
-For more detailed usage and advanced scenarios, see the following topics:
-
-- [Get barcode confidence and rotation]({{ site.features }}get-confidence-rotation.html?lang=android)
-- [Get barcode location]({{ site.features }}get-barcode-location.html?lang=android)
-- [Get detailed barcode information]({{ site.features }}get-detailed-info.html?lang=android)
-- [Filter and sort decoding results]({{ site.features }}filter-and-sort.html?lang=android)
diff --git a/programming/android/user-guide/use-cases/index.md b/programming/android/user-guide/use-cases/index.md
index 1d2bb1dc..70154b2a 100644
--- a/programming/android/user-guide/use-cases/index.md
+++ b/programming/android/user-guide/use-cases/index.md
@@ -1,6 +1,6 @@
---
layout: default-layout
-title: Use Cases - Dynamsoft Barcode Reader for Android User Guide
+title: Use Cases - Dynamsoft Barcode Reader Android
description: This page explores the use cases of Dynamsoft Barcode Reader Android SDK.
keywords: user guide, use cases, java, kotlin, android
breadcrumbText: Use Cases
diff --git a/programming/assets/architecture-cvr.png b/programming/assets/architecture-cvr.png
new file mode 100644
index 00000000..cfcaae27
Binary files /dev/null and b/programming/assets/architecture-cvr.png differ
diff --git a/programming/assets/architecture-modules.png b/programming/assets/architecture-modules.png
new file mode 100644
index 00000000..f1152394
Binary files /dev/null and b/programming/assets/architecture-modules.png differ
diff --git a/programming/assets/buttons.png b/programming/assets/buttons.png
new file mode 100644
index 00000000..cac3ba80
Binary files /dev/null and b/programming/assets/buttons.png differ
diff --git a/programming/assets/customize-ui.png b/programming/assets/customize-ui.png
new file mode 100644
index 00000000..c8c57256
Binary files /dev/null and b/programming/assets/customize-ui.png differ
diff --git a/programming/assets/scan-region-style.png b/programming/assets/scan-region-style.png
new file mode 100644
index 00000000..408b691d
Binary files /dev/null and b/programming/assets/scan-region-style.png differ
diff --git a/programming/flutter/api-reference/barcode-scanner/barcode-scan-result.md b/programming/flutter/api-reference/barcode-scanner/barcode-scan-result.md
index 9561d14e..deeb1df1 100644
--- a/programming/flutter/api-reference/barcode-scanner/barcode-scan-result.md
+++ b/programming/flutter/api-reference/barcode-scanner/barcode-scan-result.md
@@ -26,7 +26,7 @@ class BarcodeScanResult
| Property | Type | Description |
| -------- | ---- | ----------- |
| [`barcodes`](#barcodes) | *List\* | Represents all the decoded barcodes in a list of [`BarcodeResultItem`](../barcode-reader/barcode-result-item.md). |
-| [`status`](#status) | [*EnumResultStatus*](../enum/result-status.md) | Represents the result status, which can be finished, canceled or exception. |
+| [`status`](#status) | [*EnumResultStatus*](enum/result-status.md) | Represents the result status, which can be finished, canceled or exception. |
| [`errorCode`](#errorcode) | *int* | Represents the error code should something go wrong during the barcode scanning process. |
| [`errorString`](#errorstring) | *string* | Represents the error message associated with the error code should something go wrong during the barcode scanning process. |
diff --git a/programming/flutter/api-reference/barcode-scanner/barcode-scanner-config.md b/programming/flutter/api-reference/barcode-scanner/barcode-scanner-config.md
index a10a8072..fd2f60cb 100644
--- a/programming/flutter/api-reference/barcode-scanner/barcode-scanner-config.md
+++ b/programming/flutter/api-reference/barcode-scanner/barcode-scanner-config.md
@@ -145,7 +145,7 @@ bool IsAutoZoomEnabled;
### barcodeFormats
-Defines the barcode format(s) (represented as [`EnumBarcodeFormat`](../enum/barcode-format.md)) that the BarcodeScanner instance will be able to read.
+Defines the barcode format(s) (represented as [`EnumBarcodeFormat`](../barcode-reader/enum/barcode-format.md)) that the BarcodeScanner instance will be able to read.
```dart
EnumBarcodeFormat barcodeFormats;
@@ -157,7 +157,7 @@ In order to set multiple barcode formats, please use the `|` (OR) operator as su
### scanningMode
-Determines whether the Barcode Scanner will be operating in single-scan or multiple-scan mode (represented as a [`EnumScanningMode`](../enum/scanning-mode.md)). `EnumScanningMode.single` means that the scanner can recognize only one barcode at a time. `EnumScanningMode.multiple` allows for continuous scanning and for the scanner to recognize multiple barcodes in a single frame. Default value is `EnumScanningMode.single`.
+Determines whether the Barcode Scanner will be operating in single-scan or multiple-scan mode (represented as a [`EnumScanningMode`](enum/scanning-mode.md)). `EnumScanningMode.single` means that the scanner can recognize only one barcode at a time. `EnumScanningMode.multiple` allows for continuous scanning and for the scanner to recognize multiple barcodes in a single frame. Default value is `EnumScanningMode.single`.
```dart
EnumScanningMode scanningMode;
diff --git a/programming/flutter/api-reference/barcode-scanner/enum/result-status.md b/programming/flutter/api-reference/barcode-scanner/enum/result-status.md
index b6f2204d..a20104f4 100644
--- a/programming/flutter/api-reference/barcode-scanner/enum/result-status.md
+++ b/programming/flutter/api-reference/barcode-scanner/enum/result-status.md
@@ -10,7 +10,7 @@ breadcrumbText: EnumResultStatus
# EnumResultStatus
-`EnumResultStatus` is a enumeration that defines the result status of the associated [`BarcodeScanResult`](../capture-vision-router/barcode-result-item.md).
+`EnumResultStatus` is a enumeration that defines the result status of the associated [`BarcodeScanResult`](../barcode-scan-result.md).
## Definition
diff --git a/programming/objectivec-swift/api-reference/auxiliary-iExtendedResult.md b/programming/objectivec-swift/api-reference/auxiliary-iExtendedResult.md
index 6fa34523..9cd7d8ac 100644
--- a/programming/objectivec-swift/api-reference/auxiliary-iExtendedResult.md
+++ b/programming/objectivec-swift/api-reference/auxiliary-iExtendedResult.md
@@ -67,7 +67,7 @@ The following attributes are inherited from class [`DSRegionObjectElement`]({{ s
| [`getLocation`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html#getlocation) | Gets the location of the region object, represented as a quadrilateral. |
| [`setLocation`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html#setlocation) | Sets the location of the region object. |
| [`getReferencedElement`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html#getreferencedelement) | Gets the referenced element that supports the capturing of this element. |
-| [`getRegionObjectElementType`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html#getregionobjectelementtype) | Gets the type of the region object element, defined by the enumeration [`DSRegionObjectElementType`]({{ site.dcvb_android_api }}core/enum/region-object-element-type.html?lang=objc,swift). |
+| [`getRegionObjectElementType`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html#getregionobjectelementtype) | Gets the type of the region object element, defined by the enumeration [`DSRegionObjectElementType`]({{ site.dcvb_ios_api }}core/enum/region-object-element-type.html?lang=objc,swift). |
### getExtendedBarcodeResultType
diff --git a/programming/objectivec-swift/api-reference/barcode-scanner/index.md b/programming/objectivec-swift/api-reference/barcode-scanner/index.md
index 9751b2c4..82520113 100644
--- a/programming/objectivec-swift/api-reference/barcode-scanner/index.md
+++ b/programming/objectivec-swift/api-reference/barcode-scanner/index.md
@@ -16,5 +16,10 @@ keywords: BarcodeScanner, api reference, iOS
| [`DSBarcodeScannerViewController`](barcode-scanner-view-controller.md) | The main class of `BarcodeScanner`. It is an ViewController class that implements barcode decoding features. |
| [`DSBarcodeScannerConfig`](barcode-scanner-config.md) | The class that provides barcode scanning configurations. |
| [`DSBarcodeScanResult`](barcode-scan-result.md) | The result class. |
+
+## Enumerations
+
+| Enumeration | Description |
+| ----------- | ----------- |
| [`DSResultStatus`](enum-result-status.md) | An enumeration class that describes the result status. |
| [`DSScanningMode`](enum-scanning-mode.md) | An enumeration class that describes the scanning mode. |
diff --git a/programming/objectivec-swift/api-reference/dbr-index.md b/programming/objectivec-swift/api-reference/dbr-index.md
new file mode 100644
index 00000000..7cdebac2
--- /dev/null
+++ b/programming/objectivec-swift/api-reference/dbr-index.md
@@ -0,0 +1,45 @@
+---
+layout: default-layout
+title: Dynamsoft Barcode Reader iOS API Reference - DynamsoftBarcodeReader
+description: This is the DynamsoftBarcodeReader library reference page of Dynamsoft Barcode Reader SDK API Reference for iOS.
+keywords: BarcodeReader, api reference, iOS
+---
+
+# API Reference - DynamsoftBarcodeReader Library
+
+`DynamsoftBarcodeReader` library mainly provides barcode decoding algorithms. It includes APIs for you to obtain the barcode results and configure the decoding settings.
+
+- Settings
+ - [DSSimplifiedBarcodeReaderSettings]({{ site.dbr_ios_api }}simplified-barcode-reader-settings.html): Configure the barcode decoding settings.
+- Resulting Classes
+ - Basic Barcode Results
+ - [DSDecodedBarcodesResult]({{ site.dbr_ios_api }}decoded-barcodes-result.html): All barcode decoding results that extracted from a single image.
+ - [DSBarcodeResultItem]({{ site.dbr_ios_api }}barcode-result-item.html): The basic item that represents the decoding result of a single barcode.
+ - Barcode Details
+ - [DSAztecDetails]({{ site.dbr_ios_api }}auxiliary-iAztecDetails.html)
+ - [DSBarcodeDetails]({{ site.dbr_ios_api }}barcode-details.html)
+ - [DSDataMatrixDetails]({{ site.dbr_ios_api }}auxiliary-iDatamatrixDetails.html)
+ - [DSOneDCodeDetails]({{ site.dbr_ios_api }}auxiliary-iOneDCodeDetails.html)
+ - [DSPDF417Details]({{ site.dbr_ios_api }}auxiliary-iPDF417Details.html)
+ - [DSQRCodeDetails]({{ site.dbr_ios_api }}auxiliary-iQRCodeDetails.html)
+ - Intermediate Result Classes
+ - [DSCandidateBarcodeZonesUnit]({{ site.dbr_ios_api }}candidate-barcode-zones-unit.html)
+ - [DSCandidateBarcodeZone]({{ site.dbr_ios_api }}candidate-barcode-zone.html)
+ - [DSComplementedBarcodeImageUnit]({{ site.dbr_ios_api }}complemented-barcode-image-unit.html)
+ - [DSDecodedBarcodeElement]({{ site.dbr_ios_api }}decoded-barcode-element.html)
+ - [DSDecodedBarcodesUnit]({{ site.dbr_ios_api }}decoded-barcodes-unit.html)
+ - [DSDeformationResistedBarcodeImageUnit]({{ site.dbr_ios_api }}deformation-resisted-barcode-image-unit.html)
+ - [DSDeformationResistedBarcode]({{ site.dbr_ios_api }}deformation-resisted-barcode.html)
+ - [DSECISegment]({{ site.dbr_ios_api }}eci-segment.html)
+ - [DSExtendedBarcodeResult]({{ site.dbr_ios_api }}auxiliary-iExtendedResult.html)
+ - [DSLocalizedBarcodesElement]({{ site.dbr_ios_api }}localized-barcode-element.html)
+ - [DSLocalizedBarcodesUnit]({{ site.dbr_ios_api }}localized-barcodes-unit.html)
+ - [DSScaledUpBarcodeImageUnit]({{ site.dbr_ios_api }}scaled-up-barcode-image-unit.html)
+- Auxiliary Classes
+ - [DSBarcodeReaderModule]({{ site.dbr_ios_api }}barcode-reader-module.html)
+- Enumerations
+ - [DSBarcodeFormat]({{ site.dbr_ios_api }}enum/barcode-format.html)
+ - [DSDeblurMode]({{ site.dbr_ios_api }}enum/deblur-mode.html)
+ - [DSExtendedBarcodeResultType]({{ site.dbr_ios_api }}enum/extended-barcode-result-type.html)
+ - [DSLocalizationMode]({{ site.dbr_ios_api }}enum/localization-mode.html)
+ - [DSQRCodeErrorCorrectionLevel]({{ site.dbr_ios_api }}enum/qr-code-error-correction-level.html)
diff --git a/programming/objectivec-swift/api-reference/decoded-barcode-element.md b/programming/objectivec-swift/api-reference/decoded-barcode-element.md
index b7f43e8c..c99c22a6 100644
--- a/programming/objectivec-swift/api-reference/decoded-barcode-element.md
+++ b/programming/objectivec-swift/api-reference/decoded-barcode-element.md
@@ -50,6 +50,7 @@ class DecodedBarcodeElement: RegionObjectElement
| [`isDPM`](#isdpm) | Specifies if the decoded barcode is a DPM code or not. |
| [`isMirrored`](#ismirrored) | Specifies if the decoded barcode is mirrored or not. |
| [`setLocation`](#setlocation) | Sets the location of the decoded barcode. |
+| [`getECISegments`](#getecisegments) | Returns the ECI segments of the decoded barcode. |
The following attributes are inherited from class [`DSRegionObjectElement`]({{ site.dcvb_ios_api }}core/intermediate-results/region-object-element.html).
@@ -427,3 +428,24 @@ func setLocation(_ location: DSQuadrilateral)
**Return Value**
Returns 0 if the location is set successfully, otherwise returns the error code.
+
+### getECISegments
+
+Returns the ECI segments of the decoded barcode.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+-(nullable NSArray*)getECISegments;
+```
+2.
+```swift
+func getECISegments() -> [ECISegment]?
+```
+
+**Return Value**
+
+An array of [`DSECISegment`](eci-segment.md) objects representing the ECI segments of the decoded barcode, or nil if no ECI segments exist.
diff --git a/programming/objectivec-swift/api-reference/decoded-barcodes-result.md b/programming/objectivec-swift/api-reference/decoded-barcodes-result.md
index c72d1421..3e27f90e 100644
--- a/programming/objectivec-swift/api-reference/decoded-barcodes-result.md
+++ b/programming/objectivec-swift/api-reference/decoded-barcodes-result.md
@@ -40,7 +40,7 @@ The following attributes are inherited from [`DSCapturedResultBase`]({{ site.dcv
| Attributes | Type | Description |
| ---------- | ---- | ----------- |
| [`originalImageHashId`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#originalimagehashid) | *NSString \** | The hash id of the original image. |
-| [`originalImageTag`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#originalimagetag) | *DSImageTag \** | The [DSImageTag](image-tag.md) of the original image. |
+| [`originalImageTag`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#originalimagetag) | *DSImageTag \** | The [DSImageTag]({{ site.dcvb_ios_api }}core/basic-structures/image-tag.html) of the original image. |
| [`rotationTransformMatrix`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#rotationtransformmatrix) | *CGAffineTransform* | The rotation transformation matrix of the original image relative to the rotated image. |
| [`errorCode`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#errorcode) | *NSInteger* | Get the error code of this result. |
| [`errorMessage`]({{ site.dcvb_ios_api }}core/basic-structures/captured-result-base.html#errormessage) | *NSString \** | Get the error message of this result. |
diff --git a/programming/objectivec-swift/api-reference/index.md b/programming/objectivec-swift/api-reference/index.md
index 259e14e5..716c58f4 100644
--- a/programming/objectivec-swift/api-reference/index.md
+++ b/programming/objectivec-swift/api-reference/index.md
@@ -1,62 +1,122 @@
---
layout: default-layout
title: Dynamsoft Barcode Reader iOS API Reference - Main Page
-description: This is the main page of Dynamsoft Barcode Reader SDK API Reference for iOS Language.
+description: Main API reference page for Dynamsoft Barcode Reader SDK for iOS.
keywords: BarcodeReader, api reference, iOS
+noTitleIndex: false
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
---
-# SDK Overview: Modules and Main APIs
+# API Overview
+
+Dynamsoft Barcode Reader (DBR) SDK is built on the Dynamsoft Capture Vision (DCV) architecture.
+
+
+
-This page provides an overview of the various modules and highlights the most essential APIs that form the backbone of Dynamsoft Barcode Reader SDK.
-
-## Modules Summary
-
-The Dynamsoft Barcode Reader (DBR) SDK is built on the Dynamsoft Capture Vision (DCV) framework, which includes multiple modules working together to achieve barcode reading. The hierarchical structure diagram below illustrates the various modules of the DBR SDK (with modules at the top depending on those below).
-
-
-
-
Module hierarchy of the DBR SDK
-
+## Main APIs
-The table below describes the functionalities of these modules:
+| Category | Library | Description |
+| -------- | ------- | ----------- |
+| Orchestration | DynamsoftCaptureVisionRouter | Core Capture Vision Router APIs for configuring settings, starting or stopping capture, and registering receivers. |
+| Input & UI Enhancement | DynamsoftCameraEnhancer | APIs for camera control, image enhancement, and camera UI. |
+| Functional Modules | DynamsoftBarcodeReader DynamsoftCodeParser | APIs for functional modules, mainly for decoded results and result processing. |
+| Infrastructure & Utility | DynamsoftLicense DynamsoftCore DynamsoftUtility | Licensing, basic structures, intermediate results, and utility APIs. |
-| File | Description |
-|:-----|:------------|
-| `DynamsoftBarcodeReader`(DBR) | The Dynamsoft Barcode Reader module recognizes and decodes multiple barcode formats such as QR codes, Code 39, Code 128, and Data Matrix, among many others. |
-| `DynamsoftCore`(Core) | The Dynamsoft Core module lays the foundation for Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. It encapsulates the basic classes, interfaces, and enumerations shared by these SDKs. |
-| `DynamsoftCaptureVisionRouter`(CVR) | The Dynamsoft Capture Vision Router module is the cornerstone of the Dynamsoft Capture Vision (DCV) architecture. It focuses on coordinating batch image processing and provides APIs for setting up image sources and result receivers, configuring workflows with parameters, and controlling processes. |
-| `DynamsoftImageProcessing`(DIP) | The Dynamsoft Image Processing module facilitates digital image processing and supports operations for other modules, including the Barcode Reader, Label Recognizer, and Document Normalizer. |
-| `DynamsoftLicense`(License) | The Dynamsoft License module manages the licensing aspects of Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. |
-| `DynamsoftCameraEnhancer`(DCE) | The Dynamsoft Camera Enhancer module controls the camera, transforming it into an image source for the DCV (Dynamsoft Capture Vision) architecture through ISA implementation. It also enhances image quality during acquisition and provides basic viewers for user interaction. |
-| `DynamsoftUtility`(Utility) | The Dynamsoft Utility module defines auxiliary classes, including the ImageManager, and implementations of the CRF (Captured Result Filter) and ISA (Image Source Adapter) . These are shared by all Dynamsoft SDKs based on the DCV (Dynamsoft Capture Vision) architecture. |
-| `DynamsoftCodeParser`(DCP) | The Dynamsoft Code Parser module converts data strings, typically encrypted in barcodes and machine-readable zones, into human-readable information. |
-| `DynamsoftCodeParserDedicator`(DCPD) | The Dynamsoft Code Parser Dedicator module provides auxiliary functionality to enhance and extend the capabilities of DCP module. |
+### CaptureVisionRouter
-## Main APIs
+The main class [`DSCaptureVisionRouter`]({{ site.dcvb_ios_api }}capture-vision-router/capture-vision-router.html) acts as the SDK entry point and provides the following essential APIs:
-### Capture Vision Router
+#### Configure Settings
-The main class [`DSCaptureVisionRouter`]({{ site.dcvb_ios_api }}capture-vision-router/capture-vision-router.html) acts as the SDK entry point and provides the following essential APIs:
+| API | Description |
+| --- | ----------- |
+| [`initSettingsFromFile`]({{ site.dcvb_ios_api }}capture-vision-router/settings.html#initsettingsfromfile) | Load settings from a custom template file. |
+| [`DSSimplifiedCaptureVisionSettings`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html) | Access commonly used settings through a `DSSimplifiedCaptureVisionSettings` object. |
-- [Set input]({{ site.dcvb_ios_api }}capture-vision-router/multiple-file-processing.html#setinput)
-- [Config barcode reader settings]({{ site.dcvb_ios_api }}capture-vision-router/settings.html)
-- [Add result receiver]({{ site.dcvb_ios_api }}capture-vision-router/multiple-file-processing.html#addresultreceiver)
-- [Start video stream barcode processing]({{ site.dcvb_ios_api }}capture-vision-router/multiple-file-processing.html#startcapturing)
+#### Start/Stop Capture
-### Image Source Adapter
+| API | Description |
+| --- | ----------- |
+| [`startCapturing`]({{ site.dcvb_ios_api }}capture-vision-router/multiple-file-processing.html#startcapturing) | Start processing input frames with the selected template. |
+| [`stopCapturing`]({{ site.dcvb_ios_api }}capture-vision-router/multiple-file-processing.html#stopcapturing) | Stop the current capture process. |
-The [`DSImageSourceAdapter`]({{ site.dcvb_ios_api }}core/basic-structures/image-source-adapter.html) class is an abstract class representing an adapter for image sources, providing a framework for fetching, buffering, and managing images from various sources. It serves as the input for the [`DSCaptureVisionRouter`]({{ site.dcvb_ios_api }}capture-vision-router/capture-vision-router.html). You can either use the typical implementations of [`DSImageSourceAdapter`]({{ site.dcvb_ios_api }}core/basic-structures/image-source-adapter.html) or implement your own.
+#### Receive Results
-Class [`DSCameraEnhancer`]({{ site.dce_ios }}primary-api/camera-enhancer.html) is one of the typical implementations of [`DSImageSourceAdapter`]({{ site.dcvb_ios_api }}core/basic-structures/image-source-adapter.html). It is a class that not only implements the video frame obtaining APIs but also enables you to improve the video quality by adjusting the camera settings.
+Implement [`DSCapturedResultReceiver`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) to receive capture results.
-### Captured Result Receiver
+| API | Description |
+| --- | ----------- |
+| [`onDecodedBarcodesReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived) | Callback for receiving barcode decoding results as a [`DSDecodedBarcodesResult`](decoded-barcodes-result.md) object. |
+| [`onParsedResultReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#onparsedresultreceived) | Callback for receiving parsed results as a [`DSParsedResult`]({{ site.dcp_ios_api }}parsed-result.html) object. |
+| [`onCapturedResultReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#oncapturedresultreceived) | Callback for receiving all result types as a [`DSCapturedResult`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result.html) object. |
-To receive the results of video streaming barcode decoding, you need to implement the [`DSCapturedResultReceiver`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html) with the callback method [`onDecodedBarcodesReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived). The result you received in the callback method is a [`DSDecodedBarcodesResult`](decoded-barcodes-result.md) object, which contains all the decoded barcodes from the processed video frame.
+### Input - CameraEnhancer
-- [`onDecodedBarcodesReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#ondecodedbarcodesreceived): The callback method for you to receive the barcode decoding results with a [`DSDecodedBarcodesResult`](decoded-barcodes-result.md) object.
-- [`DSDecodedBarcodesResult`](decoded-barcodes-result.md): An object that contains all the [`DSBarcodeResultItem`](barcode-result-item.md) obtained from a video frame.
-- [`DSBarcodeResultItem`](barcode-result-item.md): The basic item that represents a single barcode with the decoded text and other information.
+[`DSCameraEnhancer`]({{ site.dce_ios }}primary-api/camera-enhancer.html) is a built-in implementation of [`DSImageSourceAdapter`]({{ site.dcvb_ios_api }}core/basic-structures/image-source-adapter.html). It combines camera control, image enhancement, and a UI system designed for the Dynamsoft Capture Vision architecture.
-### Camera View
+### Result
-[`DSCameraView`]({{ site.dce_ios }}auxiliary-api/dcecameraview.html) is a view class that is designed for visualizing real-time video streaming and the barcode decoding result. If the [`DSCameraEnhancer`]({{ site.dce_ios }}primary-api/camera-enhancer.html) is set as the input of your CVR, the decoded barcodes will be highlighted automatically on the [`DSCameraView`]({{ site.dce_ios }}auxiliary-api/dcecameraview.html).
+| Result | Basic Item | Type |
+| ------ | ---------- | ---- |
+| [`DSDecodedBarcodesResult`](decoded-barcodes-result.md) | [`DSBarcodeResultItem`](barcode-result-item.md) | `CRIT_BARCODE` |
+| [`DSParsedResult`]({{ site.dcp_ios_api }}parsed-result.html) | [`DSParsedResultItem`]({{ site.dcp_ios_api }}parsed-result-item.html) | `CRIT_PARSED_RESULT` |
diff --git a/programming/objectivec-swift/foundational-guide.md b/programming/objectivec-swift/foundational-guide.md
index 0fefda55..21161c51 100644
--- a/programming/objectivec-swift/foundational-guide.md
+++ b/programming/objectivec-swift/foundational-guide.md
@@ -16,6 +16,9 @@ noTitleIndex: true
- Supported ABI: **arm64** and **x86_64**.
- Development Environment: Xcode 13 and above (Xcode 14.1+ recommended).
+> [!NOTE]
+> Starting with DynamsoftBarcodeReaderBundle v11.6.1000, barcode localization using neural network models requires a minimum deployment target of iOS 16.
+
## Build Your First Application
In this section, let's create a **HelloWorld** app for reading barcodes from camera video input.
@@ -48,7 +51,7 @@ There are three ways to add the SDK into your project - **Manually**, via **Coco
2. In the top-right section of the window, search "https://github.com/Dynamsoft/barcode-reader-spm"
-3. Select `barcode-reader-spm`, choose `Exact version`, enter **11.4.3000**, then click **Add Package**.
+3. Select `barcode-reader-spm`, choose `Exact version`, enter **11.6.1000**, then click **Add Package**.
4. Check all the **xcframeworks** and add.
@@ -60,7 +63,7 @@ There are three ways to add the SDK into your project - **Manually**, via **Coco
target 'HelloWorld' do
use_frameworks!
- pod 'DynamsoftBarcodeReaderBundle','11.4.3000'
+ pod 'DynamsoftBarcodeReaderBundle','11.6.1000'
end
```
@@ -429,7 +432,7 @@ From this page, you have learned how to create a simple video barcode decoding a
### Explore Features
-If you want to explore the many features of the SDK and learn how to use them to best process the images you read in your application, read the articles in [Explore Features](user-guide/explore-features/index.html).
+If you want to explore the many features of the SDK and learn how to use them to best process the images you read in your application, read the articles in [Explore Features](user-guide/capabilities/index.html).
### Check Use Cases
@@ -438,15 +441,3 @@ If you want to check how the SDK works in popular use cases, read the articles i
### Using AVFoundation with DBR
If you use the iOS AVFoundation framework to activate the camera (instead of the Dynamsoft Camera Enhancer), [DecodeWithAVCaptureSession sample](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/FoundationalAPISamples/DecodeWithAVCaptureSession){:target="_blank"} will guide you on how to add barcode scanning to your app.
-
-### Other platforms
-
-- [Getting Started with Android](https://www.dynamsoft.com/barcode-reader/docs/mobile/programming/android/?ver=latest){:target="_blank"}
-- [Getting Started with MAUI](https://www.dynamsoft.com/capture-vision/docs/programming/maui/?ver=latest){:target="_blank"}
-- [Getting Started with React Native](https://www.dynamsoft.com/capture-vision/docs/programming/react-native/?ver=latest){:target="_blank"}
-- [Getting Started with Flutter](https://www.dynamsoft.com/capture-vision/docs/programming/flutter/?ver=latest){:target="_blank"}
-- [Getting Started with C++]({{ site.dbr_cpp }}){:target="_blank"}
-- [Getting Started with Python]({{ site.dbr_python }}){:target="_blank"}
-- [Getting Started with Java]({{ site.dbr_java }}){:target="_blank"}
-- [Getting Started with .NET]({{ site.dbr_dotnet }}){:target="_blank"}
-- [Getting Started with JS]({{ site.dbr_js }}){:target="_blank"}
diff --git a/programming/objectivec-swift/index.md b/programming/objectivec-swift/index.md
index bf13e6e3..b8f5927d 100644
--- a/programming/objectivec-swift/index.md
+++ b/programming/objectivec-swift/index.md
@@ -10,58 +10,80 @@ breadcrumbText: iOS
# Dynamsoft Barcode Reader iOS Edition
-Dynamsoft Barcode Reader (DBR) SDK iOS Edition is a barcode reading tool designed specifically for iOS developers.
-
-You can either get a quick start with the [BarcodeScanner APIs](api-reference/barcode-scanner/index.md) or experience a highly customizable development with the [foundational APIs](api-reference/index.md). Furthermore, DBR provides a powerful [parameter]({{ site.dcvb_parameters}}file/index.html?lang=objc,swift) system in order to cope with various scenarios.
-
-| | Develop with BarcodeScanner APIs | Develop with Foundational APIs |
-| -- | ------------------------------ | ------------------------------ |
-| Lines of Code | 15+ lines | 60+ lines |
-| UI | Preset | Fully customizable |
-| Decode from Live Video | ✔ | ✔ |
-| Decode from an Image | X | ✔ |
-| Performance Customization | ✔ | ✔ |
-| Camera Control | Limited | ✔ |
-| Intermediate Results | X | ✔ |
-
-## Develop with BarcodeScanner APIs
-
-`BarcodeScanner` is a component with the following features:
-
-- Minimal Code: High-level APIs achieve full functionality with one line of code.
-- Ready-to-Use UI: Pre-integrated components and UI enable quick setup.
-- Common Customization: Configuration objects simplify typical algorithm and UI setups.
-
-`BarcodeScanner` supports 2 different Scanning Modes
-
-- Single Barcode Scanning Mode
- 1. Scans any number of barcodes but returns only one result.
- 2. Speed prioritized.
- 3. Requires user to select one as the result when scanned multiple barcodes.
-- Multiple Barcodes Scanning Mode
- 1. Scans multiple barcodes and returns all scanned results.
- 2. Read-rate prioritized.
-
-
-
+Dynamsoft Barcode Reader (DBR) enables you to embed barcode reading capabilities with enterprise-class performance in your iOS applications.
+
+## Get Started
+
+
-
-> If you are looking for a solution to scan large batches of barcodes, please refer to the [`BatchBarcodeScanner`](https://www.dynamsoft.com/use-cases/batch-barcode-scanning/){:target="_blank"}. The `BatchBarcodeScanner` has much higher ability on scanning large number of barcodes. It also provides you a highly interactable UI for result previewing, editing, saving, reusing and sharing.
+## Supported Barcode Formats
+
+Dynamsoft Barcode Reader supports the following barcode formats:
-- [Build your First APP](user-guide.md)
-- [Configure your Barcode Scanner](user-guide/configure-barcode-scanner.md)
-- [View BarcodeScanner API References](./api-reference/barcode-scanner/index.md)
-- [Check out BarcodeScanner Samples on GitHub](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/BarcodeScannerAPISamples)
+| 1D/Linear Barcodes | 2D Barcodes | GS1 DataBar | Postal Codes | Other Types |
+|--------------------------|---------------------|-------------------------| --------------------- | ------------------ |
+| Code 39/Code 39 Extended | QR Code | Omnidirectional | USPS Intelligent Mail | GS1 Composite Code |
+| Code 93 | Micro QR Code | Truncated | Postnet | Patch Code |
+| Code 128 | Data Matrix | Stacked | Planet | Pharmacode |
+| Codabar | PDF417 | Stacked Omnidirectional | Australian Post | Telepen |
+| Interleaved 2 of 5 | Micro PDF417 | Limited | UK Royal Mail | |
+| EAN-8 | Aztec Code | Expanded | KIX | |
+| EAN-13 | MaxiCode (mode 2-5) | Expanded Stacked | | |
+| UPC-A | DotCode | | | |
+| UPC-E | | | | |
+| Industrial 2 of 5 | | | | |
+| MSI (Modified Plessey) | | | | |
+| Code 11 | | | | |
+| Code 32 | | | | |
+| Matrix 2 of 5 | | | | |
-## Develop with Foundational APIs
+[Learn more about these barcode formats](https://www.dynamsoft.com/barcode-reader/barcode-types/).
-If you are looking for a fully customizable barcode decoding library, you are welcome to use the Foundational APIs.
+## API References
-- [Build your APP with foundational APIs](foundational-guide.md)
-- [Explore Features](user-guide/explore-features/index.md)
-- [View Foundation API References](./api-reference/index.md)
-- [Check out Foundational API Samples on GitHub](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/FoundationalAPISamples)
+- [BarcodeScanner API Reference](api-reference/barcode-scanner/index.html)
+- [Foundational API Reference](api-reference/index.html)
## System Requirements
@@ -69,9 +91,16 @@ If you are looking for a fully customizable barcode decoding library, you are we
- Supported ABI: arm64 and x86_64.
- Development Environment: Xcode 13+ (Xcode 14.1+ recommended).
-## Download Demo App
+## License Subscription
+
+To develop and run your application with Dynamsoft Barcode Reader SDK, you need an active license key:
-- [View in App Store](https://apps.apple.com/us/app/dynamsoft-barcode-scanner-demo/id1120581630){:target="_blank"}
+- [Request a 30-day free trial license](https://www.dynamsoft.com/customer/license/trialLicense?utm_source=docs&product=dbr&package=ios){:target="_blank"}
+
+## Upgrade Instructions
+
+- [Migrate from v10](migrate-from-v10/index.md)
+- [Migrate from v9](migrate-from-v9/index.md)
## Release Notes
@@ -81,16 +110,6 @@ If you are looking for a fully customizable barcode decoding library, you are we
- [Version 8.x](release-notes/ios-8.html)
- [Version 7.6 and below](release-notes/ios-7.html)
-## Upgrade Instructions
-
-- [How to upgrade](upgrade.md)
-
-## License Subscription
-
-To develop and run your application with Dynamsoft Barcode Reader SDK, you need an active license key:
-
-- [Request a 30-day free trial license](https://www.dynamsoft.com/customer/license/trialLicense?utm_source=docs&product=dbr&package=ios){:target="_blank"}
-
## Online Store
- [Online store](https://www.dynamsoft.com/store/dynamsoft-barcode-reader/#mobile){:target="_blank"}
diff --git a/programming/objectivec-swift/migrate-from-v10/index.md b/programming/objectivec-swift/migrate-from-v10/index.md
index 142137cf..ac1b070e 100644
--- a/programming/objectivec-swift/migrate-from-v10/index.md
+++ b/programming/objectivec-swift/migrate-from-v10/index.md
@@ -51,7 +51,7 @@ There are three ways in which you can include the `DynamsoftBarcodeReaderBundle`
```
- > Please view [user guide](user-guide.md#option-2-add-the-frameworks-via-cocoapods) for the correct version number.
+ > Please view [user guide](../user-guide.md#option-2-add-the-frameworks-via-cocoapods) for the correct version number.
2. Execute the pod command to install the frameworks and generate workspace(**[TargetName].xcworkspace**):
@@ -73,4 +73,4 @@ There are three ways in which you can include the `DynamsoftBarcodeReaderBundle`
## Update the Template File
-If you are using a template file, please use the [online template converter](https://www.dynamsoft.com/tools/template-upgrade/) to convert it to the latest version.
+If you are using a template file, please use the [online template converter](https://www.dynamsoft.com/tools/template-upgrade/) to convert it to the latest version.
diff --git a/programming/objectivec-swift/migrate-from-v9/index.md b/programming/objectivec-swift/migrate-from-v9/index.md
index c5eb5d43..2ce21aba 100644
--- a/programming/objectivec-swift/migrate-from-v9/index.md
+++ b/programming/objectivec-swift/migrate-from-v9/index.md
@@ -26,7 +26,7 @@ noTitleIndex: true
> - ✅ New features and capabilities as they're released
> - ✅ Full technical support and active maintenance
-Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
+Dynamsoft Barcode Reader SDK has been refactored to integrate with DynamsoftCaptureVision (DCV) architecture since version 10. To upgrade from version 9.x or earlier to 11.x, we recommend you to follow the [User Guide](../user-guide.md) and re-write your codes. This section highlights only the key changes and necessary actions for upgrading the SDK.
**⚠️ Version 9.x is in maintenance mode only** - no new features or algorithm updates will be backported.
@@ -58,7 +58,7 @@ There are three ways in which you can include the `DynamsoftBarcodeReaderBundle`
```
- > Please view [user guide](user-guide.md#option-2-add-the-frameworks-via-cocoapods) for the correct version number.
+ > Please view [user guide](../user-guide.md#option-2-add-the-frameworks-via-cocoapods) for the correct version number.
2. Execute the pod command to install the frameworks and generate workspace(**[TargetName].xcworkspace**):
diff --git a/programming/objectivec-swift/release-notes/index.md b/programming/objectivec-swift/release-notes/index.md
index 2d73b327..3ba89a5a 100644
--- a/programming/objectivec-swift/release-notes/index.md
+++ b/programming/objectivec-swift/release-notes/index.md
@@ -9,7 +9,8 @@ breadcrumbText: Release Notes
# Dynamsoft Barcode Reader iOS SDK - Release Notes
-- [11.4.3000 (04/02/2026)]({{ site.oc_release_notes }}ios-11.html#1143000-07072026)
+- [11.6.1000 (07/30/2026)]({{ site.oc_release_notes }}ios-11.html#1161000-07302026)
+- [11.4.3000 (07/07/2026)]({{ site.oc_release_notes }}ios-11.html#1143000-07072026)
- [11.4.1200 (04/02/2026)]({{ site.oc_release_notes }}ios-11.html#1141200-04022026)
- [11.4.1010 (03/16/2026)]({{ site.oc_release_notes }}ios-11.html#1141010-03162026)
- [11.4.1000 (02/05/2026)]({{ site.oc_release_notes }}ios-11.html#1141000-02052026)
diff --git a/programming/objectivec-swift/release-notes/ios-10.md b/programming/objectivec-swift/release-notes/ios-10.md
index d1dc9320..4c13f1f1 100644
--- a/programming/objectivec-swift/release-notes/ios-10.md
+++ b/programming/objectivec-swift/release-notes/ios-10.md
@@ -253,4 +253,4 @@ noTitleIndex: true
{%- include release-notes/product-highlight-10.0.0.md -%}
-The APIs of Dynamsoft Barcode Reader are comprehensively updated. Please follow the view [upgrade instructions]({{ site.oc }}upgrade.html) to update your code.
+The APIs of Dynamsoft Barcode Reader are comprehensively updated. Please follow the view [upgrade instructions]({{ site.oc }}migrate-from-v9/) to update your code.
diff --git a/programming/objectivec-swift/release-notes/ios-11.md b/programming/objectivec-swift/release-notes/ios-11.md
index aebc94e7..8aaa08c0 100644
--- a/programming/objectivec-swift/release-notes/ios-11.md
+++ b/programming/objectivec-swift/release-notes/ios-11.md
@@ -10,6 +10,56 @@ noTitleIndex: true
# Release Notes for iOS SDK - 11.x
+## 11.6.1000 (07/30/2026)
+
+### Highlights
+
+#### Multi-Threaded Barcode Decoding
+
+- **Get results sooner with parallel processing** - Barcode decoding now uses a breadth-first strategy that decomposes a single DBR Task into one Localization Work and one or more Decoding Works. This improves thread utilization and reduces the chance that a slow `DeblurMode` attempt blocks other faster decoding attempts, helping valid results come back sooner.
+
+#### DataMatrix Color Inversion Detection
+
+- **Handle normal and inverted DataMatrix more efficiently** - Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) to automatically handle both normal and inverted DataMatrix barcodes. Instead of processing the whole image twice, the SDK applies dual-polarity handling only to localized DataMatrix regions, which makes processing faster in dual-polarity scenarios.
+
+#### Barcode Layout Analysis
+
+- **Decode dense grid barcodes more completely** - Added [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) to organize barcode locations into logical line or matrix layouts and infer unrecognized barcode regions when gaps exist, enabling workflows such as fast first-pass decoding, missing-region inference, and targeted second-pass decoding on dense N*M barcode layouts.
+
+#### Cross-Version License Support
+
+- **Use a single license across SDK versions** - Full License 1.0 keys (starting with "f") that are non-perpetual are no longer version-checked, so the same key can be used across SDK versions without reactivation.
+
+### New
+
+- Added [`AutoDetectColorInversion`]({{ site.dcvb_parameters_reference }}barcode-format-specification/auto-detect-color-inversion.html) parameter for `BarcodeFormatSpecification` to support automatic color-inversion detection for DataMatrix barcodes.
+
+- Added [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) class with [`analyze()`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html#analyze) static method for quadrilateral layout analysis.
+
+- Added [`DSLayoutPattern`]({{ site.dcvb_ios_api }}utility/enum-layout-pattern.html) enumeration with values `DSLayoutPatternUnknown`, `DSLayoutPatternLines`, and `DSLayoutPatternMatrix`.
+
+- Added [`DSLayoutElementSource`]({{ site.dcvb_ios_api }}utility/enum-layout-element-source.html) enumeration with values `DSLayoutElementSourceNone`, `DSLayoutElementSourceInput`, and `DSLayoutElementSourceInferred`.
+
+- Added [`DSMeasureUnit`]({{ site.dcvb_ios_api }}core/enum-measure-unit.html) enumeration with values `DSMeasureUnitPixel` and `DSMeasureUnitPercentage`.
+
+- Added [`DSLayoutAxis`]({{ site.dcvb_ios_api }}utility/layout-axis.html), [`DSLayoutAnalysisParameter`]({{ site.dcvb_ios_api }}utility/layout-analysis-parameter.html), [`DSLayoutElement`]({{ site.dcvb_ios_api }}utility/layout-element.html), and [`DSLayoutAnalysisResult`]({{ site.dcvb_ios_api }}utility/layout-analysis-result.html) for layout analysis configuration and results.
+
+- Added a new `GridBarcodeScanner` sample (with `sample_grid.png`) to demonstrate how to use [`DSLayoutAnalyzer`]({{ site.dcvb_ios_api }}utility/layout-analyzer.html) for barcode grid layout detection and logical row/column mapping.
+
+### Changed
+
+- [`MaxParallelTasks`]({{ site.dcvb_parameters_reference }}capture-vision-template/max-parallel-tasks.html) now controls the total number of Work-level threads in the CVR thread pool. For DBR tasks, each Localization Work and Decoding Work occupies one thread slot. DLR and DDN tasks continue to occupy one thread per task.
+
+- [`set_device_friendly_name()`]({{ site.dcvb_ios_api }}license/license-manager.html#set_device_friendly_name) now enforces parameter constraints: maximum 64 characters, allowed characters are letters (a-z, A-Z), digits (0-9), hyphen (-), underscore (_), and period (.), and must start and end with a letter or digit. Returns [`EC_PARAMETER_VALUE_INVALID`]({{ site.dcvb_ios_api }}core/enum-error-code.html) if constraints are not met.
+
+- Replaced `ONNX` model format with `CoreML` model format, resulting in a smaller package size. Note: barcode localization using neural network models now requires a minimum deployment target of iOS 16.
+
+- Improved the default display behavior of corner adjustment points in `ImageEditorView`. Previously, users had to tap the view before the corner adjustment points became visible.
+
+### Fixed
+
+- Fixed an issue in GS1-Databar AI `17` (YYMMDD) results where the month field could be missing a leading zero.
+
## 11.4.3000 (07/07/2026)
### Security Updates
diff --git a/programming/objectivec-swift/user-guide.md b/programming/objectivec-swift/user-guide.md
index 6616cbcb..af7ddcd7 100644
--- a/programming/objectivec-swift/user-guide.md
+++ b/programming/objectivec-swift/user-guide.md
@@ -17,7 +17,7 @@ This user guide will walk through the [ScanSingleBarcode](https://github.com/Dyn
> This guide aims at scanning a single barcode with the `BarcodeScanner` component.
>
> - If you have requirement for scanning multiple barcodes, you may refer to the [ScanMultipleBarcodes](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/BarcodeScannerAPISamples/ScanMultipleBarcodes/) sample or read [Enable Multiple Barcode Scanning](user-guide/scanner-multi-barcodes.md) article.
-> - If you have more complex customization requirements for the interface, you may refer to the [Foundational API Samples](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/android/FoundationalAPISamples/) or [Build your APP with Foundational APIs]({{ site.oc }}foundational-guide.html) article.
+> - If you have more complex customization requirements for the interface, you may refer to the [Foundational API Samples](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/FoundationalAPISamples) or [Build your APP with Foundational APIs]({{ site.oc }}foundational-guide.html) article.
## Requirements
@@ -25,6 +25,9 @@ This user guide will walk through the [ScanSingleBarcode](https://github.com/Dyn
- Supported ABI: **arm64** and **x86_64**.
- Development Environment: **Xcode 13** and above (Xcode 14.1+ recommended).
+> [!NOTE]
+> Starting with DynamsoftBarcodeReaderBundle v11.6.1000, barcode localization using neural network models requires a minimum deployment target of iOS 16.
+
## Build Your BarcodeScanner APP
### Step 1: Create a New Project
@@ -51,7 +54,7 @@ There are three ways in which you can add the `DynamsoftBarcodeReaderBundle` SDK
2. In the top-right section of the window, search "https://github.com/Dynamsoft/barcode-reader-spm"
-3. Select `barcode-reader-spm`, choose `Exact version`, enter **11.4.3000**, then click **Add Package**.
+3. Select `barcode-reader-spm`, choose `Exact version`, enter **11.6.1000**, then click **Add Package**.
4. Check all the **xcframeworks** and add.
@@ -63,7 +66,7 @@ There are three ways in which you can add the `DynamsoftBarcodeReaderBundle` SDK
target 'ScanSingleBarcode' do
use_frameworks!
- pod 'DynamsoftBarcodeReaderBundle','11.4.3000'
+ pod 'DynamsoftBarcodeReaderBundle','11.6.1000'
end
```
diff --git a/programming/objectivec-swift/user-guide/capabilities/add-functional-buttons.md b/programming/objectivec-swift/user-guide/capabilities/add-functional-buttons.md
new file mode 100644
index 00000000..d2e6cb52
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/add-functional-buttons.md
@@ -0,0 +1,53 @@
+---
+layout: default-layout
+title: Customize the UI of BarcodeScanner - Dynamsoft Barcode Reader iOS
+description: Learn how to customize the BarcodeScanner UI on iOS.
+keywords: BarcodeScanner, scanner, iOS, scan region, torch button, close button, scan laser
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Configure the UI Elements
+
+| Available Buttons |
+| ----------------- |
+| Torch button |
+| Camera toggle button |
+| Close button (BarcodeScanner API only) |
+
+BarcodeScanner provides a set of UI elements that you can easily customize.
+
+
+
+
buttons
+
+
+- Torch button: A clickable button that turns the torch on or off.
+- Camera toggle button: A clickable button that switches the front/back-facing camera.
+- Close button: Stops barcode scanning and returns to the previous activity.
+
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) DSCameraView *cameraView;
+self.cameraView = [[DSCameraView alloc] initWithFrame:self.view.bounds];
+[self.cameraView setTorchButtonVisible:YES];
+self.cameraView.cameraToggleButtonVisible = YES;
+```
+2.
+```swift
+let cameraView = self.cameraView
+cameraView?.torchButtonVisible = true
+cameraView?.cameraToggleButtonVisible = true
+```
+
+**Related APIs**
+
+- [`CameraView`]({{ site.dce_ios }}auxiliary-api/dcecameraview.html)
+ - [setTorchButtonVisible]({{ site.dce_ios }}auxiliary-api/dcecameraview.html#settorchbuttonvisible)
+ - [setCameraToggleButtonVisible]({{ site.dce_ios }}auxiliary-api/dcecameraview.html#setcameratogglebuttonvisible)
diff --git a/programming/objectivec-swift/user-guide/capabilities/add-graphics.md b/programming/objectivec-swift/user-guide/capabilities/add-graphics.md
new file mode 100644
index 00000000..151ba3ad
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/add-graphics.md
@@ -0,0 +1,126 @@
+---
+layout: default-layout
+title: UI Configurations - Dynamsoft Barcode Reader iOS
+description: Learn how to add basic UI elements on the DCECameraView for iOS edition.
+keywords: UI Configurations, iOS
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# UI Configurations
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+`CameraView` allows you to define your own graphics diplaying rules with the `Drawing` APIs.
+
+- `DrawingItem`: Graphics or other UI elements.
+- `DrawingLayer`: The layer for displaying the `DrawingItems`.
+- `DrawingStyle`: The style for the `DrawingItem`.
+
+## Hide Barcode Highlight Overlay
+
+Barcode highlight overlay is displayed by default. You can set the layer invisible to disable it:
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+// Get the layer first.
+DSDrawingLayer *layer = [self.cameraView getDrawingLayer:DSDrawingLayerIdDBR];
+// Set the visible property to true or false to control the visibility.
+layer.visible = NO;
+```
+2.
+```swift
+// Get the layer first.
+let layer = cameraView.getDrawingLayer(DrawingLayerId.dbr)
+// Set the visible property to true or false to control the visibility.
+layer?.visible = false
+```
+
+## Add User-Define DrawingItem(s)
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSDrawingLayer *barcodeLayer = [self.cameraView getDrawingLayer:DSDrawingLayerIdDBR];
+NSMutableArray *drawingItemArrayList = [NSMutableArray array];
+DSQuadDrawingItem *quadDrawingItem = [[DSQuadDrawingItem alloc] initWithQuad:nil];
+[drawingItemArrayList addObject:quadDrawingItem];
+[barcodeLayer setDrawingItems:drawingItemArrayList];
+// You can also use the append logic if you don't want to clear the previous items.
+// [barcodeLayer addDrawingItems:drawingItemArrayList];
+```
+2.
+```swift
+let barcodeLayer = cameraView.getDrawingLayer(DrawingLayerId.dbr)
+var drawingItemArrayList: [DrawingItem] = []
+let quadDrawingItem = QuadDrawingItem(quad: nil)
+drawingItemArrayList.append(quadDrawingItem)
+barcodeLayer?.setDrawingItems(drawingItemArrayList)
+// You can also use the append logic if you don't want to clear the previous items.
+// barcodeLayer?.addDrawingItems(drawingItemArrayList)
+```
+
+## How to Change the DrawingStyle
+
+### Use Preset Styles
+
+Set the style of the highlight overlays with a preset style:
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+// Get the layer first.
+DSDrawingLayer *layer = [self.cameraView getDrawingLayer:DSDrawingLayerIdDBR];
+// Change the style of the layer.
+[layer setDefaultStyle:DSDrawingStyleIdBlueStroke];
+```
+2.
+```swift
+// Get the layer first.
+let layer = cameraView.getDrawingLayer(DrawingLayerId.dbr)
+// Change the style of the layer.
+layer?.setDefaultStyle(DrawingStyleId.blueStroke)
+```
+
+### Use User Defined Styles
+
+Set the style of the highlight overlays with a user defined style:
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+// Get the layer first.
+DSDrawingLayer *layer = [self.cameraView getDrawingLayer:DSDrawingLayerIdDBR];
+// Create a new DrawingStyle via the DrawingStyleManager.
+UIColor *tealColor = [[UIColor alloc] initWithRed:3/255.0 green:218/255.0 blue:197/255.0 alpha:1];
+UIColor *tealColorTransparent = [[UIColor alloc] initWithRed:3/255.0 green:218/255.0 blue:197/255.0 alpha:0.13];
+NSInteger style = [DSDrawingStyleManager createDrawingStyle:tealColor strokeWidth:1.0 fillColor:tealColorTransparent textColor:tealColor font:UIFontTextStyleBody];
+// Set the newly created DrawingStyle to the layer.
+[layer setDefaultStyle:style];
+```
+2.
+```swift
+// Get the layer first.
+let layer = cameraView.getDrawingLayer(DrawingLayerId.DBR.rawValue)
+// Create a new DrawingStyle via the DrawingStyleManager.
+let tealColor = UIColor.init(red: 3/255.0, green: 218/255.0, blue: 197/255.0, alpha: 1)
+let tealColorTransparent = UIColor.init(red: 3/255.0, green: 218/255.0, blue: 197/255.0, alpha: 0.13)
+let style = DrawingStyleManager.createDrawingStyle(UIColor.systemTeal, strokeWidth: 1.0, fill: UIColor.systemTeal.withAlphaComponent(0.12), textColor: UIColor.systemTeal, font: UIFont.preferredFont(forTextStyle: .body))
+// Set the newly created DrawingStyle to the layer.
+layer?.setDefaultStyle(style)
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/barcode-formats.md b/programming/objectivec-swift/user-guide/capabilities/barcode-formats.md
new file mode 100644
index 00000000..af1f8ddc
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/barcode-formats.md
@@ -0,0 +1,111 @@
+---
+layout: default-layout
+title: Configure Barcode Formats - Dynamsoft Barcode Reader iOS
+description: Learn how to configure barcode formats in the Dynamsoft Barcode Reader iOS SDK.
+keywords: barcode formats, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Configure Barcode Formats
+
+There are two ways to configure barcode formats:
+
+- Configure formats in code.
+- Configure formats together with other settings in the template.
+
+## Configure Formats in Your Code
+
+Specify barcode formats using a combined value of [`EnumBarcodeFormat`]({{ site.dbr_ios_api }}enum/barcode-format.html).
+
+- Use bitwise OR (`|`) to combine multiple formats.
+- `EnumBarcodeFormat.BF_DEFAULT` includes all common formats (`BF_ONED`, `BF_GS1_DATABAR`, `BF_PDF417`, `BF_QR_CODE`, `BF_DATAMATRIX`, `BF_AZTEC`, `BF_MAXICODE`, `BF_MICRO_QR`, `BF_MICRO_PDF417`, and `BF_GS1_COMPOSITE`).
+- Use `EnumBarcodeFormat.BF_ALL` to enable all supported formats.
+- Use group values like `EnumBarcodeFormat.BF_ONED` when appropriate.
+
+- `SimplifiedCaptureVisionSettings.barcodeSettings.barcodeFormatIds`
+
+Example:
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) DSCaptureVisionRouter *cvr;
+self.cvr = [[DSCaptureVisionRouter alloc] init];
+NSError *error = nil;
+DSSimplifiedCaptureVisionSettings *settings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error];
+DSSimplifiedBarcodeReaderSettings *barcodeSettings = settings.barcodeSettings;
+barcodeSettings.barcodeFormatIds = DSBarcodeFormatQRCode | DSBarcodeFormatDataMatrix;
+[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:settings error:&error];
+```
+2.
+```swift
+guard let settings = try? cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue) else {
+ return
+}
+settings.barcodeSettings?.barcodeFormatIds = [.dataMatrix, .qrCode]
+do {
+ try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings:settings)
+} catch {
+ print("update runtimeSettings error:\(error.localizedDescription)")
+}
+```
+
+## Configure Formats in a Template
+
+Barcode formats are specified in `BarcodeFormatIds` under `BarcodeReaderTaskSettingOptions`. For example:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "ImageROIProcessingNameArray": [ "ROI_2D" ],
+ "Name": "ReadCommon2D",
+ }
+ ],
+ "TargetROIDefOptions": [
+ {
+ "Name": "ROI_2D",
+ "TaskSettingNameArray": [ "Task_2D" ]
+ }
+ ],
+ "BarcodeReaderTaskSettingOptions": [
+ {
+ "Name": "Task_2D",
+ "BarcodeFormatIds": [ "BF_QR_CODE", "BF_DATAMATRIX", "BF_PDF417", "BF_MAXICODE" ],
+ "SectionArray": [
+ {
+ "Section": "ST_BARCODE_LOCALIZATION",
+ "ImageParameterName": "ip"
+ },
+ {
+ "Section": "ST_BARCODE_DECODING",
+ "ImageParameterName": "ip"
+ }
+ ]
+ }
+ ],
+ "ImageParameterOptions": [
+ {
+ "Name": "ip"
+ }
+ ]
+}
+```
+
+For common formats, you can download and use the preset templates below:
+
+| Barcode Format(s) | Template |
+| ----------------- | -------- |
+| EAN13, EAN8, UPC_A, UPC_E, GS1 Databar | [ReadOneDRetail.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDRetail.json) |
+| Code128, Code39, ITF, Codabar, MSI Code | [ReadOneDIndustrial.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDIndustrial.json) |
+| QR Code | [ReadQR.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadQR.json) |
+| Data Matrix | [ReadDataMatrix.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDataMatrix.json) |
+| PDF417 | [ReadPDF417.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadPDF417.json) |
+| Aztec | [ReadAztec.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadAztec.json) |
+| QR Code, Data Matrix, PDF417 | [ReadCommon2D.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadCommon2D.json) |
+| DotCode | [ReadDotCode.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDotCode.json) |
diff --git a/programming/objectivec-swift/user-guide/capabilities/camera-control.md b/programming/objectivec-swift/user-guide/capabilities/camera-control.md
new file mode 100644
index 00000000..ad9353ac
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/camera-control.md
@@ -0,0 +1,48 @@
+---
+layout: default-layout
+title: Camera Control - Dynamsoft Barcode Reader iOS
+description: Learn how to control the camera for Dynamsoft Barcode Reader iOS, including focus behavior, zoom and related enhancement features.
+keywords: camera, iOS, auto-zoom, zoom, focus
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Camera Control
+
+This page introduces the main camera control features available in Dynamsoft Barcode Reader for iOS. It explains how to manage focus behavior, configure zoom for small or distant barcodes, and use the available camera enhancement features to improve scanning performance in specific scenarios.
+
+## Focus Control & Focus Modes
+
+In most cases, the camera automatically determines when focus is needed and adjusts the focal length accordingly. This behavior is called continuous auto-focus. In addition, the camera view supports tap-to-focus, which allows the user to trigger auto-focus manually.
+
+If your workflow needs to react to focus completion, you can register a focus listener on `DSCameraEnhancer`.
+
+**Related API**
+
+- [`setFocusListener`]({{ site.dce_ios_api }}primary-api/camera-enhancer.html#setfocuslistener)
+- [`FocusListener`]({{ site.dce_ios_api }}auxiliary-api/interface-focus-listener.html)
+
+## Auto-Zoom & Zoom Factor
+
+Zoom control is commonly used when processing small barcodes or scanning from a long distance. There are two zoom control features:
+
+- Auto-zoom: Lets the library determine whether to zoom in.
+- Zoom factor: Lets you set the zoom factor directly. This is commonly used when focusing on small barcodes.
+
+For detailed setup instructions and code examples, see [Zoom Control](zoom-control.md).
+
+## Enhanced Features
+
+When your workflow includes challenging camera conditions, use `DSCameraEnhancer` enhancement features together with barcode-scanning settings to improve the overall experience.
+
+- Auto zoom helps recognize distant barcodes.
+- Focus-related callbacks let you coordinate your UI with camera focus events.
+- BarcodeScanner configuration can also be used when you want to control zoom directly in the ready-to-use flow.
+
+**Related APIs**
+
+- [`enableEnhancedFeatures`]({{ site.dce_ios }}primary-api/camera-enhancer.html#enableenhancedfeatures)
+- [`setZoomFactor`]({{ site.dce_ios }}primary-api/camera-enhancer.html#setzoomfactor)
+- [`zoomFactor`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#zoomfactor)
+- [`isAutoZoomEnabled`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#isautozoomenabled)
\ No newline at end of file
diff --git a/programming/objectivec-swift/user-guide/capabilities/config-simplified-settings.md b/programming/objectivec-swift/user-guide/capabilities/config-simplified-settings.md
new file mode 100644
index 00000000..b3add09f
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/config-simplified-settings.md
@@ -0,0 +1,52 @@
+---
+layout: default-layout
+title: Configuring Simplified Settings - Dynamsoft Barcode Reader iOS
+description: Learn how to configure simplified settings in the Dynamsoft Barcode Reader iOS SDK.
+keywords: simplified settings, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Configure Simplified Settings
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+This page explores how to configure basic image processing settings with [`SimplifiedCaptureVisionSettings`]({{ site.dcvb_ios_api }}capture-vision-router/simplified-capture-vision-settings.html). The following APIs will be used:
+
+1. `getSimplifiedSettings`: Get the settings of the specified `template`.
+2. `updateSettings`: Update the settings to the specified `template`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSSimplifiedCaptureVisionSettings *captureVisionSettings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error];
+captureVisionSettings.minImageCaptureInterval = 200;
+captureVisionSettings.timeout = 200;
+captureVisionSettings.barcodeSettings.barcodeFormatIds = DSBarcodeFormatQRCode | DSBarcodeFormatDataMatrix;
+captureVisionSettings.barcodeSettings.expectedBarcodesCount = 1;
+[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:captureVisionSettings error:&error];
+```
+2.
+```swift
+guard let captureVisionSettings = try? cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue) else {
+ return
+}
+captureVisionSettings.minImageCaptureInterval = 200
+captureVisionSettings.timeout = 200
+captureVisionSettings.barcodeSettings?.barcodeFormatIds = [.qrCode, .dataMatrix]
+captureVisionSettings.barcodeSettings?.expectedBarcodesCount = 1
+do {
+ try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: captureVisionSettings)
+} catch {
+ // Handle error
+}
+```
+
+> [!Note]
+> To use the settings you have configured, you must specify the same template name when triggering the `startCapturing` or `capture` methods.
diff --git a/programming/objectivec-swift/user-guide/capabilities/customize-ui-index.md b/programming/objectivec-swift/user-guide/capabilities/customize-ui-index.md
new file mode 100644
index 00000000..e99cf1fd
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/customize-ui-index.md
@@ -0,0 +1,25 @@
+---
+layout: default-layout
+title: Customize the UI - Dynamsoft Barcode Reader iOS
+description: Learn how to customize the UI of Dynamsoft Barcode Reader on iOS.
+keywords: BarcodeScanner, barcode reader, iOS, scan region, torch button, close button, scan laser
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Customize Your UI
+
+| Customizable UI Elements | Descriptions |
+| ------------------------ | ------------ |
+| [Torch button](add-functional-buttons.md) | The button for you to turn on/off the torch. |
+| [Camera toggle button](add-functional-buttons.md) | The button for you to switch between front/back-facing cameras. |
+| [Close button](add-functional-buttons.md) (BarcodeScanner API only) | The button for you to manually close the BarcodeScanner. |
+| [Scan Region stroke](scan-region-style.md) | The boundary of the scan region. |
+| [Scan Region Mask](scan-region-style.md) | The mask outside the scan region. |
+| [Graphics (DrawingItems)](add-graphics.md) | Quadrilateral, rectangle, arc, etc. |
+
+
+
+
Customizable UI Elements
+
diff --git a/programming/objectivec-swift/user-guide/capabilities/feedback.md b/programming/objectivec-swift/user-guide/capabilities/feedback.md
new file mode 100644
index 00000000..f407d0be
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/feedback.md
@@ -0,0 +1,32 @@
+---
+layout: default-layout
+title: Add Scan Feedback for BarcodeScanner - Dynamsoft Barcode Reader iOS
+description: Learn how to enable scan feedback for BarcodeScanner on iOS, including beep and vibration.
+keywords: BarcodeScanner, scanner, iOS, feedback, beep, vibration
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Add Scan Feedback
+
+Trigger a beep sound or vibration when a barcode is scanned successfully.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[DSFeedback beep];
+[DSFeedback vibrate];
+```
+2.
+```swift
+Feedback.beep()
+Feedback.vibrate()
+```
+
+**Related API**
+
+- [`Feedback`]({{ site.dce_ios }}auxiliary-api/dcefeedback.html)
diff --git a/programming/objectivec-swift/user-guide/capabilities/get-original-image.md b/programming/objectivec-swift/user-guide/capabilities/get-original-image.md
new file mode 100644
index 00000000..0ef48b71
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/get-original-image.md
@@ -0,0 +1,94 @@
+---
+layout: default-layout
+title: Get Original Image - Dynamsoft Barcode Reader iOS
+description: Learn how to get the original image that produces the current result in the Dynamsoft Barcode Reader iOS SDK.
+keywords: original image, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Get Original Image
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+## Get by HashId (Recommended)
+
+Keep your current result output logic unchanged. Use `originalImageHashId` from `DecodedBarcodesResult` to fetch the original image only when needed.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result {
+ DSImageData *originalImage = [[self.cvr getIntermediateResultManager] getOriginalImage:result.originalImageHashId];
+}
+```
+2.
+```swift
+func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult) {
+ let originalImage = cvr.getIntermediateResultManager().getOriginalImage(result.originalImageHashId)
+}
+```
+
+- [`getOriginalImageHashId`]({{ site.dbr_ios_api }}decoded-barcodes-result.html)
+- [`getIntermediateResultManager`]({{ site.dcvb_ios_api }}capture-vision-router/intermediate-result.html#getintermediateresultmanager)
+- [`getOriginalImage`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html#getoriginalimage)
+
+## Include Original Image in Results
+
+Enable original image output in settings so each capture result can directly contain the original image item. This is convenient for downstream processing, but usually adds more data to each result.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSSimplifiedCaptureVisionSettings *settings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error];
+// Set outputOriginalImage to YES so the original image will be included in DSCapturedResultReceiver.
+settings.outputOriginalImage = YES;
+[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:settings error:&error];
+[self.cvr addResultReceiver:self];
+- (void)onCapturedResultReceived:(DSCapturedResult *)result {
+ if (result.items.count > 1) {
+ for (DSCapturedResultItem *item in result.items) {
+ if (item.type == DSCapturedResultItemTypeBarcode) {
+ // Use barcode result
+ } else if (item.type == DSCapturedResultItemTypeOriginalImage) {
+ // Use original image
+ }
+ }
+ }
+}
+```
+2.
+```swift
+do {
+ let settings = try cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue)
+ // Set outputOriginalImage to true so the original image will be included in CapturedResultReceiver.
+ settings.outputOriginalImage = true
+ try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: settings)
+} catch {
+}
+cvr.addResultReceiver(self)
+func onCapturedResultReceived(_ result: CapturedResult) {
+ if let items = result.items, items.count > 1
+ {
+ for item in items {
+ if item.type == .barcode {
+ // Use barcode result
+ } else if item.type == .originalImage {
+ // Use original image
+ }
+ }
+ }
+}
+```
+
+- [`outputOriginalImage`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html#outputoriginalimage)
+- [`onCapturedResultReceived`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/captured-result-receiver.html#oncapturedresultreceived)
diff --git a/programming/objectivec-swift/user-guide/capabilities/index.md b/programming/objectivec-swift/user-guide/capabilities/index.md
new file mode 100644
index 00000000..d4d4650c
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/index.md
@@ -0,0 +1,115 @@
+---
+layout: default-layout
+title: Capabilities - Dynamsoft Barcode Reader iOS
+description: Index of Dynamsoft Barcode Reader iOS capabilities.
+keywords: capabilities, feature index, iOS, objective-c, swift
+breadcrumbText: Capabilities
+noTitleIndex: false
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Capabilities
+
+Find the feature you need quickly by keyword.
+
+
+
+## Input
+
+
diff --git a/programming/objectivec-swift/user-guide/capabilities/init-customized-template.md b/programming/objectivec-swift/user-guide/capabilities/init-customized-template.md
new file mode 100644
index 00000000..b10d0542
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/init-customized-template.md
@@ -0,0 +1,66 @@
+---
+layout: default-layout
+title: Initialize Customized Templates - Dynamsoft Barcode Reader iOS User Guide
+description: Learn how to initialize customized templates in the Dynamsoft Barcode Reader iOS SDK.
+keywords: customized templates, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Initialize Customized Templates
+
+Using a template file is one of the quickest ways to improve BarcodeScanner performance. A template file is a JSON file (or JSON string) that contains a set of algorithm parameter settings. [Contact us](https://www.dynamsoft.com/company/customer-service/#contact) to get a customized template for your scanner.
+
+## Preparation
+
+Add a **Templates** folder under your project's assets directory at **src\main\assets\Templates**. Put your JSON file in the **Templates** folder. Here, we use **ReadQRCode.json** as an example.
+
+
+
+
init settings
+
+
+## Initialize with Foundational APIs
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+[self.cvr initSettingsFromFile:@"ReadQRCodes.json" error:&error];
+```
+2.
+```swift
+do {
+ try cvr.initSettingsFromFile("ReadQRCodes.json")
+} catch {
+ print("initSettingsFromFile error:\(error.localizedDescription)")
+}
+```
+
+## Initialize with BarcodeScanner APIs
+
+Specify the template file with `setTemplateFile`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSBarcodeScannerConfig *config = [[DSBarcodeScannerConfig alloc] init];
+config.templateFile = @"ReadQRCodes.json";
+```
+2.
+```swift
+let config = BarcodeScannerConfig()
+config.templateFile = "ReadQRCodes.json"
+```
+
+**Related APIs**
+
+- [`setTemplateFile`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#settemplatefile)
+- [`initSettingsFromFile`]({{ site.dcvb_ios_api }}capture-vision-router/settings.html#initsettingsfromfile)
diff --git a/programming/objectivec-swift/user-guide/capabilities/multi-frame-cross-filter.md b/programming/objectivec-swift/user-guide/capabilities/multi-frame-cross-filter.md
new file mode 100644
index 00000000..485b0f9b
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/multi-frame-cross-filter.md
@@ -0,0 +1,149 @@
+---
+layout: default-layout
+title: Multi-Frame Cross Filter - Dynamsoft Barcode Reader iOS
+description: Learn how to use the multi-frame cross filter in Dynamsoft Barcode Reader iOS.
+keywords: filter, iOS, multi-frame cross filter
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# How to Use Multi-Frame Cross Filter
+
+> [!Important]
+> Multi-frame cross filter features are internally implemented in the `BarcodeScanner` component and are not customizable. This page explains how to use them with Foundational APIs.
+
+Multi-frame cross filter is a collection of result-filtering features designed for camera-based barcode scanning.
+
+| Filter Name | Description |
+| ----------- | ----------- |
+| Cross Verification | Improves accuracy. |
+| Overlapping | Improves read rate for multi-barcode scanning. |
+| Deduplication | Removes duplicate results. |
+
+## Cross Verification
+
+Cross verification is one of the most commonly used techniques for improving scanning accuracy.
+
+### How to Enable
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+[filter enableResultCrossVerification:DSCapturedResultItemTypeBarcode isEnabled:YES];
+[self.cvr addResultFilter:filter];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+filter.enableResultCrossVerification(.barcode, isEnabled: true)
+cvr.addResultFilter(filter)
+```
+
+### Set Criteria
+
+- Frame Window: The number of frames used for cross verification. The default is 5.
+- Min Consistent Frames: The number of consistent frames required to pass cross verification. The default is 2.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+DSCrossVerificationCriteria *criteria = [[DSCrossVerificationCriteria alloc] init];
+criteria.frameWindow = 5;
+criteria.minConsistentFrames = 3;
+[filter setResultCrossVerificationCriteria:DSCapturedResultItemTypeBarcode criteria:criteria];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+let criteria = CrossVerificationCriteria()
+criteria.frameWindow = 5
+criteria.minConsistentFrames = 3
+filter.setResultCrossVerificationCriteria(.barcode, criteria: criteria)
+```
+
+## Overlapping
+
+### How to Enable
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+[filter enableLatestOverlapping:DSCapturedResultItemTypeBarcode isEnabled:YES];
+[self.cvr addResultFilter:filter];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+filter.enableLatestOverlapping(.barcode, isEnabled: true)
+cvr.addResultFilter(filter)
+```
+
+### Maximum Overlapping Frames
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+[filter setMaxOverlappingFrames:DSCapturedResultItemTypeBarcode frames:10];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+filter.setMaxOverlappingFrames(.barcode, frames: 10)
+```
+
+## Deduplication
+
+### How to Enable
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+[filter enableResultDeduplication:DSCapturedResultItemTypeBarcode isEnabled:YES];
+[self.cvr addResultFilter:filter];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+filter.enableResultDeduplication(.barcode, isEnabled: true)
+cvr.addResultFilter(filter)
+```
+
+### Set Duplicate Forget Time
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+[filter setDuplicateForgetTime:DSCapturedResultItemTypeBarcode time:5000];
+[filter enableResultDeduplication:DSCapturedResultItemTypeBarcode isEnabled:true];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+filter.setDuplicateForgetTime(.barcode, time: 5000)
+filter.enableResultDeduplication(.barcode, isEnabled: true)
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/parse-drivers-license.md b/programming/objectivec-swift/user-guide/capabilities/parse-drivers-license.md
new file mode 100644
index 00000000..07fd66ac
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/parse-drivers-license.md
@@ -0,0 +1,90 @@
+---
+layout: default-layout
+title: Parse Drivers' License - Dynamsoft Barcode Reader iOS
+description: Learn how to parse Drivers' License with Dynamsoft Barcode Reader iOS.
+keywords: parse, iOS, Drivers' License
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Parse Drivers License
+
+## How to Enable Drivers License Parsing
+
+1. Add code parser task.
+
+ ```json
+ "CodeParserTaskSettingOptions": [
+ {
+ "Name": "parse-drivers-license",
+ "CodeSpecifications": [
+ "AAMVA_DL_ID",
+ "AAMVA_DL_ID_WITH_MAG_STRIPE",
+ "SOUTH_AFRICA_DL"
+ ]
+ }
+ ]
+ ```
+
+2. Add semantic processing options and specify the target ROI to reference.
+
+ ```json
+ "SemanticProcessingOptions": [
+ {
+ "Name": "sp-drivers-license",
+ "ReferenceObjectFilter": {
+ "ReferenceTargetROIDefNameArray": [
+ "roi-drivers-license"
+ ]
+ },
+ "TaskSettingNameArray": [
+ "parse-drivers-license"
+ ]
+ }
+ ]
+ ```
+
+3. Add the semantic processing option names to your template.
+
+ ```json
+ "CaptureVisionTemplates": [
+ {
+ "Name": "ReadDriversLicense",
+ "ImageROIProcessingNameArray": [
+ "roi-drivers-license"
+ ],
+ "SemanticProcessingNameArray": [
+ "sp-drivers-license"
+ ]
+ }
+ ]
+ ```
+
+## How to Receive Parsed Results
+
+When semantic processing is enabled, parsed data is delivered through the same capture-result flow as other outputs. Use the result receiving patterns described in [Receive Results](receive-results.md) and then read the parsed output together with the barcode result returned for the current capture session.
+
+## Common Fields
+
+| Field Name | Description |
+| ---------- | ----------- |
+| CodeType | Code type, always has value "AAMVA_DL_ID" |
+| AAMVAVersionNumber | AAMVA Version Number |
+| fullName | Full name of cardholder |
+| lastName | Last name of cardholder |
+| givenName | Given name of cardholder |
+| firstName | First name of cardholder |
+| middleName | Middle name of cardholder |
+| street_1 | Street portion of the cardholder address |
+| street_2 | Second line of street portion of the cardholder address |
+| city | City portion of the cardholder address |
+| postalCode | Postal code portion of the cardholder address |
+| licenseNumber | License/ID Number |
+| vehicleClass | Jurisdiction-specific vehicle class / Driver License Classification Code |
+| expirationDate | Expiration Date |
+| birthDate | Date of Birth |
+| sex | Sex |
+| issuedDate | Date on which the document was issued |
+
+View more [Drivers License fields]({{ site.code_types }}aamva-dl-id.html).
\ No newline at end of file
diff --git a/programming/objectivec-swift/user-guide/capabilities/parse-gs1.md b/programming/objectivec-swift/user-guide/capabilities/parse-gs1.md
new file mode 100644
index 00000000..dcf35735
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/parse-gs1.md
@@ -0,0 +1,96 @@
+---
+layout: default-layout
+title: Parse GS1 AI - Dynamsoft Barcode Reader iOS
+description: Learn how to parse GS1 AI with Dynamsoft Barcode Reader iOS.
+keywords: parse, iOS, GS1 AI
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Parse GS1 AI
+
+## How to Enable GS1 AI Parsing
+
+1. Add code parser task.
+
+ ```json
+ "CodeParserTaskSettingOptions": [
+ {
+ "Name": "parse_gs1",
+ "CodeSpecifications": [
+ "GS1_AI"
+ ]
+ }
+ ]
+ ```
+
+2. Add semantic processing options and specify the target ROI to reference.
+
+ ```json
+ "SemanticProcessingOptions": [
+ {
+ "Name": "sp_gs1",
+ "ReferenceObjectFilter": {
+ "ReferenceTargetROIDefNameArray": [
+ "roi_read_gs1"
+ ]
+ },
+ "TaskSettingNameArray": [
+ "parse_gs1"
+ ]
+ }
+ ]
+ ```
+
+3. Add the semantic processing option names to your template.
+
+ ```json
+ "CaptureVisionTemplates": [
+ {
+ "Name": "ReadGS1AI",
+ "ImageROIProcessingNameArray": [
+ "roi_read_gs1"
+ ],
+ "SemanticProcessingNameArray": [
+ "sp_gs1"
+ ]
+ }
+ ]
+ ```
+
+## How to Receive Parsed Results
+
+When semantic processing is enabled, parsed data is delivered through the same capture-result flow as other outputs. Use the result receiving patterns described in [Receive Results](receive-results.md) and then read the parsed output together with the barcode result returned for the current capture session.
+
+## Common Fields
+
+| Field Name | Description |
+| ---------- | ----------- |
+| CodeType | Code type, always has value `GS1_AI` |
+| 01 | Identification of a trade item (GTIN) |
+| 10 | Batch or lot number |
+| 11 | Production date |
+| 12 | Due date for amount on payment slip |
+| 13 | Packaging date |
+| 15 | Best before date |
+| 16 | Sell by date |
+| 17 | Expiration date |
+| 20 | Internal product variant |
+| 21 | Serial number |
+| 22 | Consumer product variant |
+| 30 | Variable count of items |
+| 310n | Net weight, kilograms |
+| 37 | Count of trade items or trade item pieces contained in a logistic unit |
+| 390n | Amount payable or coupon value - Single monetary area |
+| 391n | Amount payable and ISO currency code |
+| 392n | Amount payable for a variable measure trade item - Single monetary area |
+| 393n | Amount payable for a variable measure trade item and ISO currency code |
+| 394n | Percentage discount of a coupon |
+| 395n | Amount payable per unit of measure single monetary area |
+| 400 | Customer’s purchase order number |
+| 401 | Global Identification Number for Consignment (GINC) |
+| 402 | Global Shipment Identification Number (GSIN) |
+| 410 | Ship to - Deliver to Global Location Number (GLN) |
+
+View more [GS1 AI fields]({{ site.code_types }}gs1-ai.html).
\ No newline at end of file
diff --git a/programming/objectivec-swift/user-guide/capabilities/read-from-an-image.md b/programming/objectivec-swift/user-guide/capabilities/read-from-an-image.md
new file mode 100644
index 00000000..63fcfa2e
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/read-from-an-image.md
@@ -0,0 +1,101 @@
+---
+layout: default-layout
+title: Read from an Image - Dynamsoft Barcode Reader iOS
+description: Learn how to read barcodes from an image using the Dynamsoft Barcode Reader iOS SDK.
+keywords: user guide, read from an image, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# How to Read Barcodes from an Image
+
+> [!Important]
+> Features on this page are only available for the **Foundational APIs**.
+
+> [!Note]
+> Refer to the [DecodeFromAnImage sample](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/FoundationalAPISamples/DecodeFromAnImage){:target="_blank"} for an example of decoding from the photo gallery.
+
+The `capture` methods of the `CaptureVisionRouter` class are designed to process a single image.
+
+```objc
+- (DSCapturedResult *)captureFromFile:(NSString *)filePath templateName:(NSString *)templateName error:(NSError **)error;
+- (DSCapturedResult *)captureFromFileBytes:(NSData *)fileBytes templateName:(NSString *)templateName error:(NSError **)error;
+- (DSCapturedResult *)captureFromImage:(UIImage *)image templateName:(NSString *)templateName error:(NSError **)error;
+- (DSCapturedResult *)captureFromBuffer:(NSData *)buffer width:(NSInteger)width height:(NSInteger)height stride:(NSInteger)stride format:(DSImagePixelFormat)format orientation:(NSInteger)orientation templateName:(NSString *)templateName error:(NSError **)error;
+```
+
+## Supported Image Types
+
+The following image input types are supported:
+
+1. An image specified by file path.
+2. An image in memory (file bytes).
+3. `UIImage`
+4. [com.dynamsoft.core.basic_structures.ImageData]({{ site.dcvb_ios_api }}core/basic-structures/image-data.html)
+
+> [!Note]
+> When decoding with a file path, provide the full file path, including the extension. Supported extensions are ".bmp", ".jpg", ".png", ".gif", and single-page ".tiff".
+
+## How to Specify Template Name
+
+When using a `capture` method, `templateName` is required. You can specify either a preset template or a custom template name.
+
+### Use a Preset Template
+
+`EnumPresetTemplate.PT_READ_BARCODES_READ_RATE_FIRST` is recommended when processing an image.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@property (nonatomic, strong) DSCaptureVisionRouter *cvr;
+self.cvr = [[DSCaptureVisionRouter alloc] init];
+DSCapturedResult *capturedResult = [self.cvr captureFromFile:@"Your-file-path" templateName:DSPresetTemplateReadBarcodes];
+```
+2.
+```swift
+let capturedResult = try cvr.captureFromFile("Your-file-path", templateName: PresetTemplate.readBarcodes.rawValue)
+```
+
+### Use a Customized Template
+
+For details, see [Parameters and Settings - Use a Customized Template](init-customized-template.md).
+
+## How to Extract Barcode Info
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSCapturedResult *capturedResult = [self.cvr captureFromFile:@"Your file path" templateName:DSPresetTemplateReadBarcodes];
+DSDecodedBarcodesResult *decodedBarcodesResult = capturedResult.decodedBarcodesResult;
+for (DSBarcodeResultItem *barcodeResultItem in decodedBarcodesResult.items) {
+ NSString *barcodeText = barcodeResultItem.text;
+ NSString *barcodeFormatString = barcodeResultItem.formatString;
+}
+```
+2.
+```swift
+let capturedResult = try cvr.captureFromFile("Your file path", templateName: PresetTemplate.readBarcodes.rawValue)
+if let decodedBarcodesResult = capturedResult.decodedBarcodesResult {
+ guard let barcodeResultItems = decodedBarcodesResult.items, barcodeResultItems.count>0 else
+ {
+ // result count = 0
+ return
+ }
+ for barcodeResultItem in barcodeResultItems
+ {
+ // deal with the results
+ }
+}
+```
+
+- `CapturedResult`: The largest set of image processing results. `DecodedBarcodesResult` is one subset of `CapturedResult`.
+- `DecodedBarcodesResult`: The set of barcode results. It contains an array of `BarcodeResultItem` objects and additional information.
+- `BarcodeResultItem`: An object that represents a single decoded barcode.
diff --git a/programming/objectivec-swift/user-guide/capabilities/read-from-camera.md b/programming/objectivec-swift/user-guide/capabilities/read-from-camera.md
new file mode 100644
index 00000000..9fd047cc
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/read-from-camera.md
@@ -0,0 +1,126 @@
+---
+layout: default-layout
+title: Read from camera - Dynamsoft Barcode Reader iOS
+description: Learn how to read barcodes from the camera using the Dynamsoft Barcode Reader iOS SDK.
+keywords: user guide, read from camera, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Read from Camera
+
+> [!Important]
+> This page is for **Foundational APIs** only. Refer to [Quick Start](../../user-guide.md) for how to scan from camera with `BarcodeScanner` component.
+
+Follow these three steps to read barcodes from the camera:
+
+1. Set input
+2. Register result receiver
+3. Start capturing
+
+## Set input
+
+### CameraEnhancer - Dynamsoft Standard Camera Input
+
+1. Create a `CameraEnhancer` object and bind it to `CameraView`.
+
+
+ >- Objective-C
+ >- Swift
+ >
+ >1.
+ ```objc
+ @property (nonatomic, strong) DSCameraEnhancer *dce;
+ @property (nonatomic, strong) DSCameraView *cameraView;
+ self.dce = [[DSCameraEnhancer alloc] init];
+ self.cameraView = [[DSCameraView alloc] initWithFrame:self.view.bounds];
+ self.dce.cameraView = self.cameraView;
+ ```
+ 2.
+ ```swift
+ let cameraEnhancer = CameraEnhancer()
+ let cameraView = CameraView(frame: self.view.bounds)
+ cameraEnhancer.cameraView = cameraView
+ ```
+
+2. Use `CaptureVisionRouter.setInput` to set the `CameraEnhancer` object as the input source.
+
+
+ >- Objective-C
+ >- Swift
+ >
+ >1.
+ ```objc
+ @property (nonatomic, strong) DSCaptureVisionRouter *cvr;
+ self.cvr = [[DSCaptureVisionRouter alloc] init];
+ NSError *error = nil;
+ [self.cvr setInput:self.dce error:&error];
+ ```
+ 2.
+ ```swift
+ let cvr = CaptureVisionRouter()
+ try? cvr.setInput(cameraEnhancer)
+ ```
+
+### Other Camera Input
+
+> Note:
+> If you are using a AVFoundation library, refer to the [`DecodeWithAVCaptureSession`](https://github.com/Dynamsoft/barcode-reader-mobile-samples/tree/main/ios/FoundationalAPISamples/DecodeWithAVCaptureSession) sample for camera input integration.
+
+To use another camera source, complete the following steps so the library can process the input:
+
+1. Receive the camera input.
+2. Convert the raw camera input to a `com.dynamsoft.core.basic_structures.ImageData` object.
+3. Use `addImageToBuffer` to add the `ImageData` object to the buffer.
+
+## Result Receiver
+
+Use `CapturedResultReceiver` to receive capture results. The callback is triggered each time an image is processed, regardless of whether a barcode is decoded.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@interface ViewController ()
+- (void)setUpDCV {
+ [self.cvr addResultReceiver:self];
+}
+- (void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result {
+}
+```
+2.
+```swift
+class ViewController: UIViewController, CapturedResultReceiver {
+ func setUpDCV() {
+ cvr.addResultReceiver(self)
+ }
+ func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult) {
+ }
+}
+```
+
+## Start Capturing
+
+Use `startCapturing` and `stopCapturing` to control when barcode decoding starts and stops.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.cvr startCapturing:DSPresetTemplateReadBarcodes completionHandler:nil];
+```
+2.
+```swift
+cvr.startCapturing(PresetTemplate.readBarcodes.rawValue) { isSuccess, error in
+ if (!isSuccess) {
+ if let error = error {
+ self.showResult("Error", error.localizedDescription)
+ }
+ }
+}
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/read-specific-area.md b/programming/objectivec-swift/user-guide/capabilities/read-specific-area.md
new file mode 100644
index 00000000..e014b326
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/read-specific-area.md
@@ -0,0 +1,154 @@
+---
+layout: default-layout
+title: Read from a Specific Area - Dynamsoft Barcode Reader iOS
+description: Learn how to read from a specific area using the Dynamsoft Barcode Reader iOS SDK.
+keywords: user guide, read specific area, iOS, objective-c, swift
+noTitleIndex: true
+needGenerateH3Content: true
+needAutoGenerateSidebar: true
+---
+
+# Read from a Specific Area
+
+## Set a Scan Region on Camera
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSRect *region = [[DSRect alloc] init];
+region.left = 0.15;
+region.top = 0.25;
+region.right = 0.85;
+region.bottom = 0.65;
+[self.dce setScanRegion:region error:nil];
+```
+2.
+```swift
+let region = Rect()
+region.left = 0.15
+region.top = 0.25
+region.right = 0.85
+region.bottom = 0.65
+try? dce.setScanRegion(region)
+```
+
+**Related APIs**
+
+- [`CameraEnhancer`]({{ site.dbr_ios_api }}camera-enhancer/camera-enhancer.html)
+ - [`setScanRegion`]({{ site.dbr_ios_api }}camera-enhancer/camera-enhancer.html#setscanregion)
+
+## Set an ROI via Simplified Settings
+
+> [!Important]
+> Simplified Settings are only available for the **Foundational APIs**.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSSimplifiedCaptureVisionSettings *captureVisionSettings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error];
+NSArray *points = @[
+ [NSValue valueWithCGPoint:CGPointMake(15, 30)],
+ [NSValue valueWithCGPoint:CGPointMake(85, 30)],
+ [NSValue valueWithCGPoint:CGPointMake(85, 70)],
+ [NSValue valueWithCGPoint:CGPointMake(15, 70)]
+];
+DSQuadrilateral *roiQuad = [[DSQuadrilateral alloc] initWithPointArray:points];
+captureVisionSettings.roi = roiQuad;
+captureVisionSettings.roiMeasuredInPercentage = YES;
+[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:captureVisionSettings error:&error];
+```
+2.
+```swift
+let captureVisionSettings = try cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue)
+let point0 = CGPoint(x: 15, y: 30) as NSValue
+let point1 = CGPoint(x: 85, y: 30) as NSValue
+let point2 = CGPoint(x: 85, y: 55) as NSValue
+let point3 = CGPoint(x: 15, y: 55) as NSValue
+let roiQuad = Quadrilateral.init(pointArray: [point0,point1,point2,point3])
+captureVisionSettings.roi = roiQuad
+captureVisionSettings.roiMeasuredInPercentage = true
+do {
+ try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: captureVisionSettings)
+} catch {
+}
+```
+
+## Set ROIs in Customized Template
+
+Define a single ROI:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "Name" : "CV_0",
+ "ImageROIProcessingNameArray": ["barcode-decoding-roi-1" ]
+ }
+ ],
+ "TargetROIDefOptions" : [
+ {
+ "Name" : "barcode-decoding-roi-1",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 30 ],
+ "SecondPoint" : [ 85, 30 ],
+ "ThirdPoint" : [ 85, 70 ],
+ "FourthPoint" : [ 15, 70 ],
+ }
+ }
+ }
+ ]
+}
+```
+
+You can define multiple ROIs in `TargetROIDefOptions`. For each ROI, you can assign a different task or reuse the same task.
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "Name" : "CV_0",
+ "ImageROIProcessingNameArray": ["barcode-decoding-roi-1","barcode-decoding-roi-2" ]
+ }
+ ],
+ "TargetROIDefOptions" : [
+ {
+ "Name" : "barcode-decoding-roi-1",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 20 ],
+ "SecondPoint" : [ 85, 40 ],
+ "ThirdPoint" : [ 85, 40 ],
+ "FourthPoint" : [ 15, 20 ]
+ }
+ }
+ },{
+ "Name" : "barcode-decoding-roi-2",
+ "TaskSettingNameArray": ["barcode-decoding-task-1"],
+ "Location":
+ {
+ "Offset": {
+ "MeasuredByPercentage" : 1,
+ "FirstPoint" : [ 15, 60 ],
+ "SecondPoint" : [ 85, 80 ],
+ "ThirdPoint" : [ 85, 80 ],
+ "FourthPoint" : [ 15, 60 ]
+ }
+ }
+ }
+ ]
+}
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/receive-results.md b/programming/objectivec-swift/user-guide/capabilities/receive-results.md
new file mode 100644
index 00000000..73cc6a83
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/receive-results.md
@@ -0,0 +1,110 @@
+---
+layout: default-layout
+title: Receive Results - Dynamsoft Barcode Reader iOS
+description: Learn how to receive captured results when using Dynamsoft Barcode Reader iOS edition.
+keywords: Receive Results, iOS
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Receive Results
+
+## Receive Results from DSCapturedResultReceiver
+
+If you only need barcode results, use `onDecodedBarcodesReceived`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+@interface ViewController ()
+- (void)setUpDCV {
+ [self.cvr addResultReceiver:self];
+}
+- (void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result {
+ // Add your code to use the DSDecodedBarcodesResult
+}
+```
+2.
+```swift
+class ViewController: UIViewController, CapturedResultReceiver {
+ func setUpDCV() {
+ cvr.addResultReceiver(self)
+ }
+ func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult) {
+ // Add your code to use the DecodedBarcodesResult
+ }
+}
+```
+
+If you need multiple result types at the same time, `onCapturedResultReceived` is more convenient.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+- (void)onCapturedResultReceived:(DSCapturedResult *)result {
+ if (result.items.count > 0) {
+ for (DSCapturedResultItem *item in result.items) {
+ // Use the captured result items you need here.
+ }
+ }
+}
+```
+2.
+```swift
+func onCapturedResultReceived(_ result: CapturedResult) {
+ if let items = result.items, items.count > 0 {
+ for item in items {
+ // Use the captured result items you need here.
+ }
+ }
+}
+```
+
+## Receive Results from Capture Methods
+
+The result is returned as a `CapturedResult` object when using `capture` methods. You can get the types you want from the `CapturedResult` object.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSCapturedResult *capturedResult = [self.cvr captureFromFile:@"Your file path" templateName:DSPresetTemplateReadBarcodes error:&error];
+DSDecodedBarcodesResult *decodedBarcodesResult = capturedResult.decodedBarcodesResult;
+for (DSBarcodeResultItem *barcodeResultItem in decodedBarcodesResult.items) {
+ NSString *barcodeText = barcodeResultItem.text;
+ NSString *barcodeFormatString = barcodeResultItem.formatString;
+}
+```
+2.
+```swift
+let capturedResult = try cvr.captureFromFile("Your file path", templateName: PresetTemplate.readBarcodes.rawValue)
+if let decodedBarcodesResult = capturedResult.decodedBarcodesResult,
+ let barcodeResultItems = decodedBarcodesResult.items {
+ for barcodeResultItem in barcodeResultItems {
+ let barcodeText = barcodeResultItem.text
+ let barcodeFormatString = barcodeResultItem.formatString
+ }
+}
+```
+
+## Receive Results from DSIntermediateResultReceiver
+
+To use `DSIntermediateResultReceiver`, get the `DSIntermediateResultManager` from `DSCaptureVisionRouter` first. Then add a result receiver to the intermediate result manager for the intermediate result types you want to observe.
+
+Intermediate results are useful when you need to inspect earlier algorithm stages, debug processing, or build custom workflows based on localized or transformed barcode data.
+
+**Related APIs**
+
+- [`getIntermediateResultManager`]({{ site.dcvb_ios_api }}capture-vision-router/intermediate-result.html#getintermediateresultmanager)
+- [`DSIntermediateResultManager`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html)
+- [`DSIntermediateResultReceiver`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/intermediate-result-receiver.html)
\ No newline at end of file
diff --git a/programming/objectivec-swift/user-guide/capabilities/scan-region-style.md b/programming/objectivec-swift/user-guide/capabilities/scan-region-style.md
new file mode 100644
index 00000000..90c5e1cd
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/scan-region-style.md
@@ -0,0 +1,69 @@
+---
+layout: default-layout
+title: Scan Region Style - Dynamsoft Barcode Reader iOS
+description: Learn how to configure the scan region style for Dynamsoft Barcode Reader iOS.
+keywords: scan region, style, iOS
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Configure the Scan Region Style
+
+## Visibility
+
+After you call `setScanRegion`, the scan region is visible by default. You can hide it by calling `setScanRegionMaskVisible`.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.dce setScanRegion:[[DSRect alloc] initWithLeft:0.1 top:0.35 right:0.9 bottom:0.55 measuredInPercentage:YES] error:nil];
+[self.cameraView setScanRegionMaskVisible:NO];
+```
+2.
+```swift
+try! dce.setScanRegion(Rect(left: 0.1, top: 0.35, right: 0.9, bottom: 0.55, measuredInPercentage: true))
+cameraView.setScanRegionMaskVisible(false)
+```
+
+## Scan Region Mask Style
+
+The scan region mask style includes the stroke color, stroke width, and mask color.
+
+
+
+
Scan Region Style
+
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.cameraView setScanRegionMaskStyle:UIColor.whiteColor strokeWidth:2 surroundingColour:[[UIColor darkGrayColor] colorWithAlphaComponent:0.65]];
+```
+2.
+```swift
+cameraView.setScanRegionMaskStyle(.white, strokeWidth: 2, surroundingColour: UIColor.darkGray.withAlphaComponent(0.65))
+```
+
+## Laser
+
+The scan laser is a light bar that moves up and down to indicate active scanning. It does not affect performance. It is hidden by default. When a scan region is set, the laser movement is limited to that region.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.cameraView setScanLaserVisible:YES];
+```
+2.
+```swift
+cameraView.setScanLaserVisible(true)
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/single-multiple.md b/programming/objectivec-swift/user-guide/capabilities/single-multiple.md
new file mode 100644
index 00000000..36802cdb
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/single-multiple.md
@@ -0,0 +1,73 @@
+---
+layout: default-layout
+title: Scan Multiple Barcodes with BarcodeScanner - Dynamsoft Barcode Reader iOS
+description: Use BarcodeScanner iOS edition to scan multiple barcodes
+keywords: Multiple barcodes, iOS
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Single & Multiple Barcode Scanning
+
+This article explains how to switch between single-barcode scanning mode and multi-barcode scanning mode.
+
+
+## Configure Expected Barcodes Count
+
+- `expectedBarcodesCount` = 1: Scan a single barcode.
+- `expectedBarcodesCount` = 0: Allows the library to return more than one result, but it does not aggressively optimize for decoding multiple barcodes.
+- `expectedBarcodesCount` = 999 or any other number: Makes every effort to decode up to the specified number of barcodes, when possible.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+NSError *error = nil;
+DSSimplifiedCaptureVisionSettings *captureVisionSettings = [self.cvr getSimplifiedSettings:DSPresetTemplateReadBarcodes error:&error];
+captureVisionSettings.barcodeSettings.expectedBarcodesCount = 1;
+[self.cvr updateSettings:DSPresetTemplateReadBarcodes settings:captureVisionSettings error:&error];
+```
+2.
+```swift
+guard let captureVisionSettings = try? cvr.getSimplifiedSettings(PresetTemplate.readBarcodes.rawValue) else {
+ return
+}
+captureVisionSettings.barcodeSettings?.expectedBarcodesCount = 1
+do {
+ try cvr.updateSettings(PresetTemplate.readBarcodes.rawValue, settings: captureVisionSettings)
+} catch {
+}
+```
+
+**Related APIs**
+
+- [`simplifiedCaptureVisionSettings`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/simplified-capture-vision-settings.html)
+- [`simplifiedBarcodeReaderSettings`]({{ site.dbr_ios_api }}simplified-barcode-reader-settings.html)
+
+## Improve Multi-Scan Stability
+
+Use max overlapping feature of multi-frame cross filter to improve the stability of multi-barcode scanning.
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+DSMultiFrameResultCrossFilter *filter = [[DSMultiFrameResultCrossFilter alloc] init];
+// Default value of MaxOverlapingFrames is 5. Increase the number if you want to further improve the stability.
+[filter setMaxOverlappingFrames:DSCapturedResultItemTypeBarcode frames:10];
+[filter enableLatestOverlapping:DSCapturedResultItemTypeBarcode isEnabled:YES];
+[self.cvr addResultFilter:filter];
+```
+2.
+```swift
+let filter = MultiFrameResultCrossFilter()
+// Default value of MaxOverlapingFrames is 5. Increase the number if you want to further improve the stability.
+filter.setMaxOverlappingFrames(.barcode, frames: 10)
+filter.enableLatestOverlapping(.barcode, isEnabled: true)
+cvr.addResultFilter(filter)
+```
diff --git a/programming/objectivec-swift/user-guide/capabilities/zoom-control.md b/programming/objectivec-swift/user-guide/capabilities/zoom-control.md
new file mode 100644
index 00000000..980baf1a
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/capabilities/zoom-control.md
@@ -0,0 +1,62 @@
+---
+layout: default-layout
+title: Zoom Control for BarcodeScanner - Dynamsoft Barcode Reader iOS
+description: Learn how to configure zoom control for BarcodeScanner on iOS, including auto-zoom and zoom factor.
+keywords: BarcodeScanner, scanner, iOS, auto-zoom, zoom
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: true
+---
+
+# Zoom Control
+
+Zoom control is commonly used when processing small barcodes or scanning from a long distance. There are two zoom control features:
+
+- Auto-zoom: Lets the library determine whether to zoom in.
+- Zoom factor: Lets you set the zoom factor directly. This is commonly used when focusing on small barcodes.
+
+## Auto Zoom
+
+Enable auto-zoom so the camera can zoom in automatically.
+
+
+
+
Auto Zoom
+
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.dce enableEnhancedFeatures:DSEnhancedFeaturesAutoZoom];
+```
+2.
+```swift
+dce.enableEnhancedFeatures(EnhancedFeatures.autoZoom)
+```
+
+**Related API**
+
+- [`enableEnhancedFeatures`]({{ site.dce_ios }}primary-api/camera-enhancer.html#enableenhancedfeatures)
+
+
+## Zoom Factor
+
+
+>- Objective-C
+>- Swift
+>
+>1.
+```objc
+[self.dce setZoomFactor:2.0];
+```
+2.
+```swift
+dce.setZoomFactor(2.0)
+```
+
+**Related API**
+
+- [`setZoomFactor`]({{ site.dce_ios }}primary-api/camera-enhancer.html#setzoomfactor)
diff --git a/programming/objectivec-swift/user-guide/concept/capture-vision-architecture.md b/programming/objectivec-swift/user-guide/concept/capture-vision-architecture.md
new file mode 100644
index 00000000..16dd06c9
--- /dev/null
+++ b/programming/objectivec-swift/user-guide/concept/capture-vision-architecture.md
@@ -0,0 +1,99 @@
+---
+layout: default-layout
+title: Dynamsoft Capture Vision Architecture
+description: The introduction of Dynamsoft Capture Vision Architecture for iOS.
+needAutoGenerateSidebar: true
+needGenerateH3Content: true
+noTitleIndex: false
+---
+
+# Core Concepts
+
+This page provides a high-level overview of the underlying architecture and data flow of the Dynamsoft Barcode Reader SDK. Understanding these concepts will help you efficiently configure the SDK for various scanning scenarios.
+
+## Capture Vision Architecture
+
+How CVR coordinate Works
+
+
+
+
+
+- Fetch images from the camera or file folder.
+- Load and apply settings (or templates).
+- Coordinate tasks and invoke the Functional Modules required for each task.
+- Distribute captured results.
+
+## Image Source
+
+`DSImageSourceAdapter` is the standard input for Capture Vision architecture. Once the capture process starts, CVR continuously acquires image data from the `DSImageSourceAdapter` until the capture process is stopped or the image source is exhausted.
+
+You can directly use the implementations provided by Dynamsoft:
+
+- Camera: `DSCameraEnhancer`
+- File/Directory: `DSDirectoryFetcher`
+
+You can also create a custom `DSImageSourceAdapter`.
+
+## Templates, Settings
+
+For each input image, the tasks to be executed and the algorithms used by each task are controlled by a template. Settings are a commonly used subset of template configuration options.
+
+When starting a capture process, you must specify a valid template name. You can use either a `Preset Template` or a `Customized Template`.
+
+- `Preset Template`: The preset templates for you to quickly access.
+- `Customized Template`: If you are not satisfied with the current performance, you can contact us for full customization. You will then receive a customized template.
+
+## Functional Modules
+
+Functional modules are the core components of the product. CVR invokes the required functional modules based on the tasks you configure. The available functional modules include:
+
+- `DynamsoftBarcodeReader`: Reads various types of barcodes. See all [supported barcode formats](../../api-reference/enum/barcode-format.md).
+- `DynamsoftCodeParser`: Parses the text content of recognized results, such as driver's licenses and GS1 AI data.
+
+A valid license is required to activate these functional modules.
+
+## Result Receivers
+
+### Standard Output - Captured Results
+
+`DSCapturedResult` is the standard output of Dynamsoft Capture Vision. It contains all results generated during image processing, including barcode results, parsed results, and other captured data.
+
+`DSBarcodeResultItem` represents a single detected barcode and contains the complete information for that barcode. If multiple barcodes are recognized in a single scan, the barcode result will contain multiple `DSBarcodeResultItem` objects.
+
+
+
+| Example BarcodeResultItem | |
+| ----------------- | -- |
+| `format` | 67108864 |
+| `formatString` | QR_CODE |
+| `text` | www.dynamsoft.com |
+| `bytes` | [119],[119],[119],[46],[100],[121],...... |
+| `location` | Point(196, 1101), Point(518, 1000),...... |
+| `confidence` | 86 |
+| `angle` | 345 |
+| `moduleSize` | 10 |
+| `isDPM` | FALSE |
+| `isMirrored` | FALSE |
+| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
+
+### Advanced Output - Intermediate Results
+
+From the beginning of image processing to the generation of a `DSCapturedResult`, the algorithm goes through multiple stages. The output produced at each stage is called an intermediate result.
+
+Intermediate results are useful for the following purposes:
+
+1. Algorithm tuning: By examining intermediate results, you can identify how to optimize the algorithm. For example, you can evaluate barcode region quality in `BinaryImageUnit` to adjust `BinarizationModes`, or inspect `LocalizedBarcodesUnit` to refine `LocalizationModes`.
+2. Debugging: By reviewing the output of each stage, you can locate the stage where a problem occurs and determine whether the issue comes from the template configuration or your code.
+3. Customization: You can implement custom processing logic based on intermediate results without modifying the SDK itself.
+
+The intermediate results related to barcode decoding include:
+
+| Stage | Intermediate Results | Description |
+|-------|----------------------|-------------|
+| BinarizeImageStage | `BinaryImageUnit` | The quality of binary image determines the localization accuracy. |
+| LocalizeCandidateBarcodesStage | `LocalizedBarcodesUnit` | The localized barcodes. |
+| ResistDeformationStage | `DeformationResistedBarcodeImageUnit` | The barcode image processed by `DeformationResistingModes`. |
+| ComplementBarcodeStage | `ComplementedBarcodeImageUnit` | The barcode image processed by `BarcodeComplementModes`. |
+| ScaleBarcodeImageStage | `ScaledBarcodeImageUnit` | The scaled barcode image processed by `BarcodeScaleModes`. |
+| DecodeBarcodesStage | `DecodedBarcodesUnit` | The decoded barcodes. |
\ No newline at end of file
diff --git a/programming/objectivec-swift/user-guide/configure-barcode-scanner.md b/programming/objectivec-swift/user-guide/configure-barcode-scanner.md
index ba384f47..2dc68208 100644
--- a/programming/objectivec-swift/user-guide/configure-barcode-scanner.md
+++ b/programming/objectivec-swift/user-guide/configure-barcode-scanner.md
@@ -11,7 +11,7 @@ needAutoGenerateSidebar: true
# Configure the barcode scan settings
-When developing with [`BarcodeScannerViewController`](../api-reference/barcode-scanner/barcode-scanner-view-controller.md), you can add configurations via the [`BarcodeScannerConfig`](../api-reference/barcode-scanner/barcode-scanner-config.md) class. This page will guide you on how to configure the settings.
+When developing with [`BarcodeScannerViewController`](../api-reference/barcode-scanner/barcode-scanner-view-controller.md), you can add configurations via the [`BarcodeScannerConfig`](../api-reference/barcode-scanner/barcode-scanner-config.md) class. These articles will guide you on how to configure the settings.
- [Specify Barcode Formats](scanner-barcode-formats.md)
- [Switch Single & Multiple Scanning Modes](scanner-multi-barcodes.md)
diff --git a/programming/objectivec-swift/user-guide/explore-features/index.md b/programming/objectivec-swift/user-guide/explore-features/index.md
index 0805b101..fed8ceac 100644
--- a/programming/objectivec-swift/user-guide/explore-features/index.md
+++ b/programming/objectivec-swift/user-guide/explore-features/index.md
@@ -38,6 +38,7 @@ While the SDK has been carefully tuned to provide the best possible performance
* [Read images with texture]({{site.features}}read-images-with-texture.html?lang=objc,swift)
* [Read images with lots of text]({{site.features}}read-images-with-lots-of-text.html?lang=objc,swift)
* [Preprocess images to read difficult barcodes]({{site.features}}preprocess-images.html?lang=objc,swift)
+* [Predetect Region of Interest (ROI)]({{site.features}}use-region-predetection.html?lang=objc,swift)
## Barcode Results
diff --git a/programming/objectivec-swift/user-guide/index.md b/programming/objectivec-swift/user-guide/index.md
index 0c7dad1f..23fc97f5 100644
--- a/programming/objectivec-swift/user-guide/index.md
+++ b/programming/objectivec-swift/user-guide/index.md
@@ -9,28 +9,51 @@ needGenerateH3Content: true
needAutoGenerateSidebar: true
---
-# Dynamsoft Barcode Reader iOS Edition User Guide
+# Get Started
-These articles will help you get the most out of Dynamsoft Barcode Reader Android Edition.
+Choose one of the two guides below based on your development goal.
-## Build Your APP with the BarcodeScanner APIs
+
-Develop a barcode scanner by using the ready-to-use UI, `BarcodeScannerViewController`.
-
-- [Build your First APP](../user-guide.md)
-- [Configure your barcode scanner](configure-barcode-scanner.md)
- - [Specify Barcode Formats](scanner-barcode-formats.md)
- - [Switch Single & Multiple Scanning Modes](scanner-multi-barcodes.md)
- - [Improve the Performance](scanner-improve-performance.md)
- - [Customize Scanner UI](scanner-customize-ui.md)
- - [Add Additional Settings](scanner-additional-settings.md)
-
-## Build Your APP with Foundational API
+---
-High-level customization is available via the foundational APIs. These samples show you how to access the full feature of the foundational DynamsoftBarcodeReader SDK.
+## Which one should I choose?
-- [Build your APP with foundational APIs](../foundational-guide.md).
-- [Explore Features](explore-features/index.md)
+- Choose **BarcodeScanner** if you want to ship quickly with minimal setup.
+- Choose **Foundational APIs** if you need deeper customization and full control.
## Develop for Other Platforms
diff --git a/programming/objectivec-swift/user-guide/scanner-barcode-formats.md b/programming/objectivec-swift/user-guide/scanner-barcode-formats.md
index 29719ce5..bfa203f3 100644
--- a/programming/objectivec-swift/user-guide/scanner-barcode-formats.md
+++ b/programming/objectivec-swift/user-guide/scanner-barcode-formats.md
@@ -1,7 +1,7 @@
---
layout: default-layout
title: Specify Barcode Formats for BarcodeScanner - Dynamsoft Barcode Reader for iOS
-description: "Learn how to use Dynamsoft Barcode Reader iOS features with practical setup guidance, workflow tips, and examples for building reliable capture apps today."
+description: Learn how to configure barcode formats in the Dynamsoft Barcode Reader iOS SDK.
keywords: BarcodeScanner, scanner, iOS, barcode formats
needAutoGenerateSidebar: true
needGenerateH3Content: true
@@ -10,7 +10,23 @@ noTitleIndex: true
# Specify Barcode Formats
-Set the supported barcode format is always the first step when configuring the BarcodeScanner. You can specify the barcode format via the method `barcodeFormats`.
+There are two ways to configure barcode formats:
+
+- Configure formats in code.
+- Configure formats together with other settings in the template.
+
+## Configure Formats in Your Code
+
+Specify barcode formats using a combined value of `DSBarcodeFormat`.
+
+- Use bitwise OR (`|`) to combine multiple formats.
+- `DSBarcodeFormatDefault` includes all common formats (`DSBarcodeFormatOneD`, `DSBarcodeFormatGS1Databar`, `DSBarcodeFormatPDF417`, `DSBarcodeFormatQRCode`, `DSBarcodeFormatDataMatrix`, `DSBarcodeFormatAztec`, `DSBarcodeFormatMaxiCode`, `DSBarcodeFormatMicroQR`, `DSBarcodeFormatMicroPDF417`, and `DSBarcodeFormatGS1Composite`).
+- Use `DSBarcodeFormatAll` to enable all supported formats.
+- Use group values like `DSBarcodeFormatOneD` when appropriate.
+
+### BarcodeScanner API
+
+- `BarcodeScannerConfig.barcodeFormats`
**Code Snippet**
@@ -32,3 +48,58 @@ config.barcodeFormats = [.oneD, .qrCode]
**Related APIs**
- [`barcodeFormats`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#barcodeformats)
+
+## Configure Formats in a Template
+
+Barcode formats are specified in `BarcodeFormatIds` under `BarcodeReaderTaskSettingOptions`. For example:
+
+```json
+{
+ "CaptureVisionTemplates": [
+ {
+ "ImageROIProcessingNameArray": [ "ROI_2D" ],
+ "Name": "ReadCommon2D"
+ }
+ ],
+ "TargetROIDefOptions": [
+ {
+ "Name": "ROI_2D",
+ "TaskSettingNameArray": [ "Task_2D" ]
+ }
+ ],
+ "BarcodeReaderTaskSettingOptions": [
+ {
+ "Name": "Task_2D",
+ "BarcodeFormatIds": [ "BF_QR_CODE", "BF_DATAMATRIX", "BF_PDF417", "BF_MAXICODE" ],
+ "SectionArray": [
+ {
+ "Section": "ST_BARCODE_LOCALIZATION",
+ "ImageParameterName": "ip"
+ },
+ {
+ "Section": "ST_BARCODE_DECODING",
+ "ImageParameterName": "ip"
+ }
+ ]
+ }
+ ],
+ "ImageParameterOptions": [
+ {
+ "Name": "ip"
+ }
+ ]
+}
+```
+
+For common formats, you can download and use the preset templates below:
+
+| Barcode Format(s) | Template |
+| ----------------- | -------- |
+| EAN13, EAN8, UPC_A, UPC_E, GS1 Databar | [ReadOneDRetail.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDRetail.json) |
+| Code128, Code39, ITF, Codabar, MSI Code | [ReadOneDIndustrial.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadOneDIndustrial.json) |
+| QR Code | [ReadQR.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadQR.json) |
+| Data Matrix | [ReadDataMatrix.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDataMatrix.json) |
+| PDF417 | [ReadPDF417.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadPDF417.json) |
+| Aztec | [ReadAztec.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadAztec.json) |
+| QR Code, Data Matrix, PDF417 | [ReadCommon2D.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadCommon2D.json) |
+| DotCode | [ReadDotCode.json](https://github.com/Dynamsoft/barcode-reader-mobile-samples/blob/main/ios/BarcodeScannerAPISamples/ScenarioOrientedSamples/src/main/assets/Templates/ReadDotCode.json) |
diff --git a/programming/objectivec-swift/user-guide/scanner-customize-ui.md b/programming/objectivec-swift/user-guide/scanner-customize-ui.md
index ba5b4da1..3463b7af 100644
--- a/programming/objectivec-swift/user-guide/scanner-customize-ui.md
+++ b/programming/objectivec-swift/user-guide/scanner-customize-ui.md
@@ -10,6 +10,14 @@ noTitleIndex: true
# Configure the UI Elements
+| Available UI Element|
+| ------------------- |
+| Scan region |
+| Scan Laser |
+| Torch button |
+| Camera toggle button |
+| Close button |
+
BarcodeScanner provides a set of UI elements that can be easily customized.
@@ -19,8 +27,12 @@ BarcodeScanner provides a set of UI elements that can be easily customized.
- Close button: Stop barcode scanning and go back to the previous activity.
- Scan Region: Set a region of interest so that the algorithm focus on this region only. It can sharpenly improve the processing speed. For some special barcode types like DotCode the scan region improves the read-rate as well.
-- Torch button: A clickable button that can turn on/off the torch.
- Scan Laser: A line that moving up and down. Its moving area is limited in the scan region.
+- Torch button: A clickable button that can turn on/off the torch.
+
+## Scan Region & Scan Laser
+
+### Configure with BarcodeScanner APIs
>- Objective-C
@@ -57,8 +69,18 @@ config.isCameraToggleButtonVisible = true
**Related APIs**
+- [`BarcodeScannerConfig`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html)
- [`scanRegion`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#scanregion)
-- [`isTorchButtonVisible`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#istorchbuttonvisible)
- [`isScanLaserVisible`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#isscanlaservisible)
+
+## Buttons
+
+### Add Buttons with BarcodeScanner APIs
+
+Button visibility is also configured through `BarcodeScannerConfig`.
+
+**Related APIs**
+
+- [`isTorchButtonVisible`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#istorchbuttonvisible)
- [`isCloseButtonVisible`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#isclosebuttonvisible)
- [`isCameraToggleButtonVisible`]({{ site.dbr_ios_api }}barcode-scanner/barcode-scanner-config.html#iscameratogglebuttonvisible)
diff --git a/programming/objectivec-swift/user-guide/understand-barcode-results.md b/programming/objectivec-swift/user-guide/understand-barcode-results.md
deleted file mode 100644
index 7abfeb75..00000000
--- a/programming/objectivec-swift/user-guide/understand-barcode-results.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-layout: default-layout
-title: Understand Barcode Results - Dynamsoft Barcode Reader for iOS
-description: Understand the structure of the barcode decoding results of Dynamsoft Barcode Reader iOS.
-keywords: understand results, iOS
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
-noTitleIndex: true
----
-
-# Understanding Barcode Results
-
-`DecodedBarcodesResult` is the barcode-type result returned by the Dynamsoft Barcode Reader SDK. It represents all barcode-related information captured from a single image or video frame.
-
-It contains:
-
-- All decoded barcodes.
-- Metadata about the original image.
-- Error information when a failure occurs.
-- A rotation transformation matrix if the original image includes rotation info.
-
-
->- Objective-C
->- Swift
->
->1.
-```objc
-- (void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result
-{
- if (result.items.count != 0)
- {
- for (DSBarcodeResultItem *item in result.items)
- {
- NSString *barcodeText = barcodeResultItem.text;
- NSString *barcodeFormatString = barcodeResultItem.formatString;
- }
- }
-}
-```
-2.
-```swift
-func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult) {
- if let items = result.items, !items.isEmpty {
- for item in items {
- let barcodeText = barcodeResultItem.text
- let barcodeFormatString = barcodeResultItem.formatString
- }
- }
-}
-```
-
-## How to Use
-
-### Check Error Messages
-
-Error messages are typically caused by:
-
-- The barcode reading task is not working properly.
-- The operation timeout.
-
-
->- Objective-C
->- Swift
->
->1.
-```objc
-- (void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result
-{
- if (result.errorCode != 0)
- {
- // Handle the error.
- }
-}
-```
-2.
-```swift
-func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult) {
- if result.errorCode != 0 {
- // Handle the error.
- }
-}
-```
-
-> [!Note]
-> You might still receive barcode results even when the error message is not empty.
-
-### Access decoded barcodes
-
-Each decoded barcode is a `BarcodeResultItem` from `result.items`. The following is an example:
-
-
-
-| BarcodeResultItem | |
-| ----------------- | -- |
-| `format` | 67108864 |
-| `formatString` | QR_CODE |
-| `text` | www.dynamsoft.com |
-| `bytes` | [119],[119],[119],[46],[100],[121],...... |
-| `location` | Point(196, 1101), Point(518, 1000),...... |
-| `confidence` | 86 |
-| `angle` | 345 |
-| `moduleSize` | 10 |
-| `isDPM` | FALSE |
-| `isMirrored` | FALSE |
-| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
-
-### Common fields to use
-
-- `text`: The decoded string. This is the most common field used for downstream processing.
-- `formatString`: The barcode symbology (for example, `QR_CODE`, `EAN_13`).
-- `bytes`: Raw payload bytes. By default, barcode text is interpreted using ISO-8859-1. Use this when the payload contains binary data or requires custom decoding.
-- `location`: Corner points of the barcode in the image, useful for drawing overlays.
-- `confidence`: A confidence score. Higher values indicate more reliable decoding.
-- `details`: Symbology-specific details (varies by barcode type).
-
-### Access the Original Image
-
-The original image is not returned by default. In `onDecodedBarcodesReceived`, you receive the original image `HashId`. Use it to fetch the image when needed.
-
-**Code Snippet**
-
-
->- Objective-C
->- Swift
->
->1.
-```objc
--(void)onDecodedBarcodesReceived:(DSDecodedBarcodesResult *)result
-{
- DSImageData *originalImage = [[_cvr getIntermediateResultManager] getOriginalImage:result.originalImageHashId];
-}
-```
-2.
-```swift
-func onDecodedBarcodesReceived(_ result: DecodedBarcodesResult)
-{
- let originalImage = cvr.getIntermediateResultManager().getOriginalImage(result.originalImageHashId)
-}
-```
-
-> [!Note]
-> Use `originalImage` within the lifecycle of each `onDecodedBarcodesReceived` callback. Otherwise, it may be released or replaced by a newer image.
-
-**Related APIs**
-
-- [`originalImageHashId`]({{ site.dbr_ios_api }}decoded-barcodes-result.html)
-- [`getIntermediateResultManager`]({{ site.dcvb_ios_api }}capture-vision-router/intermediate-result.html#getintermediateresultmanager)
-- [`getOriginalImage`]({{ site.dcvb_ios_api }}capture-vision-router/auxiliary-classes/intermediate-result-manager.html#getoriginalimage)
-
-## Explore Result Details
-
-This page provides a high-level overview of barcode scan results. For detailed usage and advanced scenarios, see:
-
-- [Get barcode confidence and rotation]({{ site.features }}get-confidence-rotation.html?lang=ios)
-- [Get barcode location]({{ site.features }}get-barcode-location.html?lang=ios)
-- [Get detailed barcode information]({{ site.features }}get-detailed-info.html?lang=ios)
-- [Filter and sort decoding results]({{ site.features }}filter-and-sort.html?lang=ios)
diff --git a/programming/objectivec-swift/user-guide/understand-barcode-scan-results.md b/programming/objectivec-swift/user-guide/understand-barcode-scan-results.md
deleted file mode 100644
index b1fb71e0..00000000
--- a/programming/objectivec-swift/user-guide/understand-barcode-scan-results.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-layout: default-layout
-title: Understand Barcode Results - Dynamsoft Barcode Reader for iOS
-description: Understand the structure of the barcode decoding results of Dynamsoft Barcode Reader iOS.
-keywords: understand results, iOS
-needAutoGenerateSidebar: true
-needGenerateH3Content: true
-noTitleIndex: true
----
-
-# Understanding Barcode Scan Results
-
-`BarcodeScanResult` is the object returned by the `onScanResult` callback when a scanning session finishes, is canceled, or encounters an error. Every `BarcodeScanResult` contains a `resultStatus` and a list of barcodes.
-The barcode list is non-empty only when `resultStatus` is `RS_FINISHED`.
-
-
->- Objective-C
->- Swift
->
->1.
-```objc
-@property (nonatomic, copy, readwrite) void (^)(DSBarcodeScanResult *) onScannedResult
-```
-2.
-```swift
-var onScannedResult: ((BarcodeScanResult) -> Void)?
-```
-
-## How to Use
-
-### Check Status and Error Messages
-
-Always check `resultStatus` before accessing the decoded barcodes.
-
-- `finished`: Scanning completed successfully. At least one barcode is available.
-- `canceled` / `exception`: No barcodes are returned.
-
-`exception` might be caused by:
-
-- You configured an invalid or expired license via `BarcodeScannerConfig.license`.
-- You configured an invalid template via `BarcodeScannerConfig.templateFile`.
-
-### Access decoded barcodes
-
-Each decoded barcode is a `BarcodeResultItem` from `result.getBarcodes()`. The following is an example of a `BarcodeResultItem`:
-
-
-
-| BarcodeResultItem | |
-| ----------------- | -- |
-| `format` | 67108864 |
-| `formatString` | QR_CODE |
-| `text` | www.dynamsoft.com |
-| `bytes` | [119],[119],[119],[46],[100],[121],...... |
-| `location` | Point(196, 1101), Point(518, 1000),...... |
-| `confidence` | 86 |
-| `angle` | 345 |
-| `moduleSize` | 10 |
-| `isDPM` | FALSE |
-| `isMirrored` | FALSE |
-| `details` | rows = 2 columns = 2 errorCorrectionLevel = L version = 2 model = 2 mode = 7 page = -1 totalPage = -1 parityData = 0 dataMaskPattern = 2 codewords = ...... |
-
-### Common fields to use
-
-- `text`: The decoded string. This is the most common field used for downstream processing.
-- `formatString`: The barcode symbology (for example, `QR_CODE`, `EAN_13`).
-- `bytes`: Raw bytes of the barcode payload. By default, barcode text is interpreted using ISO-8859-1. Use this field when the payload contains binary data or requires custom decoding.
-- `location`: Corner points of the barcode in the image, useful for drawing overlays.
-- `confidence`: A confidence score. Higher values indicate more reliable decoding.
-- `details`: Symbology-specific details (varies by barcode type).
-
-## Explore Result Details
-
-This page provides a high-level overview of barcode scan results.
-For more detailed usage and advanced scenarios, see the following topics:
-
-- [Get barcode confidence and rotation]({{ site.features }}get-confidence-rotation.html?lang=objc,swift)
-- [Get barcode location]({{ site.features }}get-barcode-location.html?lang=objc,swift)
-- [Get detailed barcode information]({{ site.features }}get-detailed-info.html?lang=objc,swift)
-- [Filter and sort decoding results]({{ site.features }}filter-and-sort.html?lang=objc,swift)
diff --git a/programming/react-native/api-reference/barcode-scanner/barcode-scanner-config.md b/programming/react-native/api-reference/barcode-scanner/barcode-scanner-config.md
index a521986d..3bfc3b0c 100644
--- a/programming/react-native/api-reference/barcode-scanner/barcode-scanner-config.md
+++ b/programming/react-native/api-reference/barcode-scanner/barcode-scanner-config.md
@@ -1,16 +1,16 @@
---
layout: default-layout
-title: BarcodeScannerConfig Class - Dynamsoft Barcode Reader React Native Edition
-description: BarcodeScannerConfig of DynamsoftBarcodeReader React Native is the class that defines the configurations for Barcode scanning.
-keywords: Barcode, scanner, config, flutter
+title: BarcodeScanConfig Class - Dynamsoft Barcode Reader React Native Edition
+description: BarcodeScanConfig of DynamsoftBarcodeReader React Native is the class that defines the configurations for Barcode scanning.
+keywords: Barcode, scanner, config, react native
needAutoGenerateSidebar: true
needGenerateH3Content: true
-breadcrumbText: BarcodeScannerConfig
+breadcrumbText: BarcodeScanConfig
---
-# BarcodeScannerConfig Class
+# BarcodeScanConfig Class
-`BarcodeScannerConfig` is the class that defines the configurations for the Barcode Scanner.
+`BarcodeScanConfig` is the class that defines the configurations for the Barcode Scanner.
## Definition
@@ -32,7 +32,7 @@ interface BarcodeScanConfig
| [`isCloseButtonVisible`](#isclosebuttonvisible) | *boolean* | Toggles the visibility of the close button. |
| [`isGuideFrameVisible`](#isguideframevisible) | *boolean* | Indicates the visibility status of the guide frame on the display. |
| [`isCameraToggleButtonVisible`](#iscameratogglebuttonvisible) | *boolean* | Determines the visibility status of the camera toggle button that is used to switch between the rear and front cameras. |
-| [`scanRegion`](#scanregion) | *DMRect?* | Specifies the region that the scanner will focus on and decode barcodes from. |
+| [`scanRegion`](#scanregion) | *DSRect* | Specifies the region that the scanner will focus on and decode barcodes from. |
| [`isScanLaserVisible`](#isscanlaservisible) | *boolean* | Enables/Disables the visibility status of the scan laser. |
| [`isAutoZoomEnabled`](#isautozoomenabled) | *boolean* | Enables/Disables the auto zoom feature of the camera. |
| [`barcodeFormats`](#barcodeformats) | *[EnumBarcodeFormat](../barcode-reader/enum/barcode-format.md)* | Defines the barcode format(s) that the BarcodeScanner instance will be able to read. |
@@ -40,7 +40,7 @@ interface BarcodeScanConfig
| [`maxConsecutiveStableFramesToExit`](#maxconsecutivestableframestoexit) | *int* | Specifies the maximum number of consecutive stable frames to process before finishing the scan process. |
| [`expectedBarcodesCount`](#expectedbarcodescount) | *int* | Defines the expected number of barcodes to be scanned in a single frame or image. |
| [`templateNodeRequire`](#templatenoderequire) | *NodeRequire* | Provides a Node.js 'require' function to load the template file when running in a Node environment. |
-| [`resolution`](#resolution) | *[EnumResolution]({{ site.dce_react_native_api }}enum/resolution.html)* | Provides a Node.js 'require' function to load the template file when running in a Node environment. |
+| [`resolution`](#resolution) | *[EnumResolution]({{ site.dce_react_native_api }}enum/resolution.html)* | Specifies the camera resolution for the barcode scanner. |
### license
@@ -67,7 +67,7 @@ If you are choosing to use a JSON string directly, please note that it will need
Determines the visibility status of the torch (flashlight) button of the UI. If set to `true`, the torch button will be displayed - enabling users to turn the flashlight on/off. Default is `true`.
```tsx
-isTorchButtonVisible?: booleanean;
+isTorchButtonVisible?: boolean;
```
### isBeepEnabled
@@ -75,7 +75,7 @@ isTorchButtonVisible?: booleanean;
Establishes whether a beep sound is played when a barcode is successfully detected. If set to `true`, a beep will be played once a barcode is successfully detected. Default is `false`.
```tsx
-isBeepEnabled?: booleanean;
+isBeepEnabled?: boolean;
```
### isVibrateEnabled
@@ -83,7 +83,7 @@ isBeepEnabled?: booleanean;
Determines if the phone will provide haptic feedback once a barcode is successfully detected. If set to `true`, the phone will give off a small vibration to indicate that a barcode was successfully recognized. Default is `false`.
```tsx
-isVibrateEnabled?: booleanean;
+isVibrateEnabled?: boolean;
```
### isCloseButtonVisible
@@ -91,7 +91,7 @@ isVibrateEnabled?: booleanean;
Toggles the visibility of the close button. If set to `true`, a close button will appear on the top-right corner of the UI to allow the user to close the camera view. If the scanner is closed before a scan is finished, the `status` of the [`BarcodeScanResult`](barcode-scan-result.md) will be `EnumResultStatus.canceled`. Default is `true`.
```tsx
-isCloseButtonVisible?: booleanean;
+isCloseButtonVisible?: boolean;
```
### isCameraToggleButtonVisible
@@ -99,7 +99,7 @@ isCloseButtonVisible?: booleanean;
Determines the visibility status of the camera toggle button that is used to switch between the rear and front cameras. If set to `true`, a button will show up on the bottom-right to allow the user to switch to the front camera (since the default is the rear camera). Default is `false`.
```tsx
-isCameraToggleButtonVisible?: booleanean;
+isCameraToggleButtonVisible?: boolean;
```
### scanRegion
@@ -124,7 +124,7 @@ scanRegion?: DSRect;
Enables/Disables the visibility status of the scan laser. The scan laser is just a visual light bar that moves up and down to indicate that the scan process is taking place - it does not affect the performance in any way. Default is `true`.
```tsx
-isScanLaserVisible?: booleanean;
+isScanLaserVisible?: boolean;
```
### isAutoZoomEnabled
@@ -132,12 +132,12 @@ isScanLaserVisible?: booleanean;
Enables/Disables the auto zoom feature of the camera. When enabled (true), the scanner will automatically zoom in when attempting to scan a barcode that it can vaguely localize, but not fully. Zooming in allows the library to more accurately detect the barcode. This is especially helpful in scenarios where there is some distance between the barcode and the camera. Default is `false`.
```tsx
-isAutoZoomEnabled?: booleanean;
+isAutoZoomEnabled?: boolean;
```
### barcodeFormats
-Defines the barcode format(s) (represented as [`EnumBarcodeFormat`](../enum/barcode-format.md)) that the BarcodeScanner instance will be able to read.
+Defines the barcode format(s) (represented as [`EnumBarcodeFormat`](../barcode-reader/enum/barcode-format.md)) that the BarcodeScanner instance will be able to read.
```tsx
barcodeFormats?: bigint;
@@ -149,7 +149,7 @@ In order to set multiple barcode formats, please use the `|` (OR) operator as su
### scanningMode
-Determines whether the Barcode Scanner will be operating in single-scan or multiple-scan mode (represented as a [`EnumScanningMode`](../enum/scanning-mode.md)). `EnumScanningMode.single` means that the scanner can recognize only one barcode at a time. `EnumScanningMode.multiple` allows for continuous scanning and for the scanner to recognize multiple barcodes in a single frame. Default value is `EnumScanningMode.single`.
+Determines whether the Barcode Scanner will be operating in single-scan or multiple-scan mode (represented as a [`EnumScanningMode`](enum/scanning-mode.md)). `EnumScanningMode.single` means that the scanner can recognize only one barcode at a time. `EnumScanningMode.multiple` allows for continuous scanning and for the scanner to recognize multiple barcodes in a single frame. Default value is `EnumScanningMode.single`.
```tsx
scanningMode?: EnumScanningMode;
diff --git a/programming/react-native/api-reference/barcode-scanner/enum/result-status.md b/programming/react-native/api-reference/barcode-scanner/enum/result-status.md
index 9ce83e16..664aa37f 100644
--- a/programming/react-native/api-reference/barcode-scanner/enum/result-status.md
+++ b/programming/react-native/api-reference/barcode-scanner/enum/result-status.md
@@ -10,7 +10,7 @@ breadcrumbText: EnumResultStatus
# EnumResultStatus
-`EnumResultStatus` is a enumeration that defines the result status of the associated [`BarcodeScanResult`](../capture-vision-router/barcode-result-item.md).
+`EnumResultStatus` is a enumeration that defines the result status of the associated [`BarcodeScanResult`](../barcode-scan-result.md).
## Definition