Getting Started with Android
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 3.4+ (Android Studio 4.2+ recommended).
Add the SDK
The Dynamsoft Barcode Reader (DBR) Android SDK comes with two modules:
-
DynamsoftBarcodeReader.aar: Main module. Provides APIs to easily scan 1D and 2D barcodes from image files and camera video.
-
DynamsoftCameraEnhancer.aar (Optional): Dynamsoft Camera Enhancer (DCE) module for getting video frames from mobile cameras. Provides APIs for camera control, camera preview, and other advanced features.
Note:
DCE is optional. If you want to use Android CameraX SDK to control camera, preview video, and read barcodes in the callback function that outputs a video frame, please refer to DecodeWithCameraX sample.
There are two ways to add the SDK into your project - Manually and Maven.
Add the Library Manually
-
Download the SDK package from the Dynamsoft Website. After unzipping, two aar files can be found in the DynamsoftBarcodeReader\Libs directory:
- DynamsoftBarcodeReader.aar
- DynamsoftCameraEnhancer.aar (Optional)
Note:
If you want to use Android Camera SDK or your own sdk to control camera, please ignore DynamsoftCameraEnhancer.aar in the following steps.
-
Copy the above two aar files to the target directory such as
[App Project Root Path]\app\libs
-
Open the file
[App Project Root Path]\app\build.gradle
and add reference in the dependencies:dependencies { implementation fileTree(dir: 'libs', include: ['*.aar']) }
-
Click Sync Now. After the synchronization completes, the SDK is added to the project.
Add the Library via Maven
-
Open the file
[App Project Root Path]\app\build.gradle
and add the maven repository:repositories { maven { url "https://download2.dynamsoft.com/maven/aar" } }
-
Add reference in the dependencies:
dependencies { implementation 'com.dynamsoft:dynamsoftbarcodereader:9.6.40' // Remove the following line if you want to use Android Camera sdk or your own sdk to control camera. implementation 'com.dynamsoft:dynamsoftcameraenhancer:2.3.20' }
-
Click Sync Now. After the synchronization completes, the SDK is added to the project.
Build Your First Application
In this section, let’s see how to create a HelloWorld app for reading barcodes from camera video input.
Note:
- Android Studio 4.2 is used here in this guide.
- You can get similar source code from
- DCE is used for camera capture in this guide below. If you use the Android CameraX SDK for camera capture, check DecodeWithCameraX sample on how to add barcode scanning to your app.
Create a New Project
-
Open Android Studio, select File > New > New Project.
-
Choose the correct template for your project. In this sample, we use Empty Activity.
-
When prompted, choose your app name ‘HelloWorld’ and set the Save location, Language, and Minimum SDK (we use 21 here).
Note:
- With minSdkVersion set to 21, your app is compatible with more than 94.1% of devices on the Google Play Store (last update: March 2021).
Include the Library
Add the SDK to your new project. Please read Add the SDK section for more details.
Initialize License
-
Initialize the license in the file
MainActivity.java
.- Java
- Kotlin
-
import com.dynamsoft.dbr.BarcodeReader; import com.dynamsoft.dbr.DBRLicenseVerificationListener; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initialize license for Dynamsoft Barcode Reader. BarcodeReader.initLicense("DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9", new DBRLicenseVerificationListener() { @Override public void DBRLicenseVerificationCallback(boolean isSuccess, Exception error) { if(!isSuccess){ error.printStackTrace(); } } }); } }
-
import com.dynamsoft.dbr.BarcodeReader; import com.dynamsoft.dbr.DBRLicenseVerificationListener; class MainActivityKt : AppCompatActivity() { private lateinit var mReader: BarcodeReader private lateinit var mCameraEnhancer: CameraEnhancer private var alertDialog: AlertDialog? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main_kt) BarcodeReader.initLicense("DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9") { isSuccessful, e -> runOnUiThread { if (!isSuccessful) { e.printStackTrace() showDialog(getString(R.string.error_dialog_title), e.message?:"", null) } } } } }
Note:
- The license string here grants a time-limited free trial which requires network connection to work.
- You can request a 30-day trial license via the Request a Trial License link.
- If you download the Installation Package, it comes with a 30-day trial license by default.
Initialize Camera Module
-
In the Project window, open app > res > layout >
activity_main.xml
and create a DCE camera view section under the root node.<com.dynamsoft.dce.DCECameraView android:id="@+id/cameraView" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="25dp" tools:layout_editor_absoluteY="0dp" />
-
Import the dynamsoft camera module, initialize the camera view and bind to the created Camera Enhancer instance in the file
MainActivity.java
.- Java
- Kotlin
-
import com.dynamsoft.dce.DCECameraView; import com.dynamsoft.dce.CameraEnhancer; import com.dynamsoft.dce.CameraEnhancerException; public class MainActivity extends AppCompatActivity { CameraEnhancer mCameraEnhancer; @Override protected void onCreate(Bundle savedInstanceState) { ... // Add camera view for previewing video. DCECameraView cameraView = findViewById(R.id.cameraView); mCameraEnhancer = new CameraEnhancer(MainActivity.this); mCameraEnhancer.setCameraView(cameraView); } }
-
import com.dynamsoft.dbr.BarcodeReader; import com.dynamsoft.dbr.DBRLicenseVerificationListener; class MainActivityKt : AppCompatActivity() { private lateinit var mCameraEnhancer: CameraEnhancer override fun onCreate(savedInstanceState: Bundle?) { val cameraView = findViewById<DCECameraView>(R.id.cameraView) cameraView.overlayVisible = true // Create an instance of Dynamsoft Camera Enhancer for video streaming. mCameraEnhancer = CameraEnhancer(this@MainActivityKt) mCameraEnhancer.cameraView = cameraView } }
Initialize Barcode Reader
-
Import and initialize the barcode reader, bind to the created Camera Enhancer instance.
- Java
- Kotlin
-
import com.dynamsoft.dbr.BarcodeReaderException; public class MainActivity extends AppCompatActivity { BarcodeReader mReader; @Override protected void onCreate(Bundle savedInstanceState) { ... try { mReader = new BarcodeReader(); } catch (BarcodeReaderException e) { e.printStackTrace(); } mReader.setCameraEnhancer(mCameraEnhancer); } }
-
import com.dynamsoft.dbr.BarcodeReaderException; class MainActivityKt : AppCompatActivity() { private lateinit var mCameraEnhancer: CameraEnhancer private lateinit var mReader: BarcodeReader override fun onCreate(savedInstanceState: Bundle?) { try { // Create an instance of Dynamsoft Barcode Reader. mReader = BarcodeReader() } catch (e: BarcodeReaderException) { e.printStackTrace() } mReader.setCameraEnhancer(mCameraEnhancer) } }
-
Create a barcode result listener and register with the barcode reader instance to get recognized barcode results.
- Java
- Kotlin
-
import com.dynamsoft.dbr.ImageData; import com.dynamsoft.dbr.TextResult; import com.dynamsoft.dbr.TextResultListener; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { ... mReader.setTextResultListener(new TextResultListener() { // Obtain the recognized barcode results and display. @Override public void textResultCallback(int id, ImageData imageData, TextResult[] textResults) { (MainActivity.this).runOnUiThread(new Runnable() { @Override public void run() { showResult(textResults); } }); } }); } }
-
import com.dynamsoft.dbr.BarcodeReaderException; class MainActivityKt : AppCompatActivity() { private lateinit var mCameraEnhancer: CameraEnhancer private lateinit var mReader: BarcodeReader override fun onCreate(savedInstanceState: Bundle?) { // Addd textResultListener to your project mReader.setTextResultListener { id, imageData, textResult -> runOnUiThread { showResult(textResult) } } } }
-
Override the
MainActivity.onResume
andMainActivity.onPause
functions to start/stop video barcode scanning. After scanning starts, the Barcode Reader will automatically invoke thedecodeBuffer
API to process the video frames from the Camera Enhancer, then send the recognized barcode results to the text result callback.- Java
- Kotlin
-
public class MainActivity extends AppCompatActivity { ... @Override public void onResume() { // Start video barcode reading mReader.startScanning(); try { mCameraEnhancer.open(); } catch (CameraEnhancerException e) { e.printStackTrace(); } super.onResume(); } @Override public void onPause() { // Stop video barcode reading mReader.stopScanning(); try { mCameraEnhancer.close(); } catch (CameraEnhancerException e) { e.printStackTrace(); } super.onPause(); } }
-
public class MainActivity extends AppCompatActivity { // Add configurations to onResume and onPause public override fun onResume() { // Start video barcode reading try { mCameraEnhancer.open() } catch (e: CameraEnhancerException) { e.printStackTrace() } mReader.startScanning() super.onResume() } public override fun onPause() { // Stop video barcode reading try { mCameraEnhancer.close() } catch (e: CameraEnhancerException) { e.printStackTrace() } mReader.stopScanning() super.onPause() } }
Display Barcode Results
-
In the Project window, open app > res > layout >
activity_main.xml
, create a text view section under the root node to display the recognized barcode results. The following sample code is a TextView under RelativeLayout... <TextView android:id="@+id/tv_res" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="430dp" android:textSize="16sp" android:gravity="center" android:scrollbars="vertical" android:textColor="@color/white" android:visibility="visible"/>
-
Display barcode result in TextView.
- Java
- Kotlin
-
public class MainActivity extends AppCompatActivity { ... TextView tvRes; @Override protected void onCreate(Bundle savedInstanceState) { ... // Add TextView to display recognized barcode results. tvRes = findViewById(R.id.tv_res); } private void showResult(TextResult[] results) { if (results != null && results.length > 0) { String strRes = ""; for (int i = 0; i < results.length; i++) strRes += results[i].barcodeText + "\n\n"; tvRes.setText(strRes); } else { tvRes.setText(""); } } }
-
class MainActivityKt : AppCompatActivity() { private fun showDialog( title: String, message: String, listener: DialogInterface.OnClickListener? ) { val dialog = AlertDialog.Builder(this) alertDialog = dialog.setTitle(title).setPositiveButton("OK", listener) .setMessage(message) .setCancelable(false) .show() } private fun showResult(results: Array<TextResult>?){ var strRes = ""; if(results != null && results.isNotEmpty()){ DCEFeedback.vibrate(this) mReader.stopScanning() for(i in results.indices){ strRes += results[i].barcodeText } if (alertDialog != null && alertDialog!!.isShowing) { return } showDialog("Result", strRes){ _, _ -> mReader.startScanning()} } } }
Build and Run the Project
-
Select the device that you want to run your app on from the target device drop-down menu in the toolbar.
-
Click the Run app button, then Android Studio installs your app on your connected device and starts it.
You can download similar source code here:
Next Steps
From this page, you have learned how to create a simple video barcode decoding app. In the next steps, the following pages will help you on adding configurations to enhance your barcode reader.
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.
Check Use Cases
If you want to check how the SDK works in popular use cases, read the articles in Use Cases.
Optimize Performance
If you have successfully integrated the SDK in your application but would like to get the best performance possible, read how to do this in Optimize Performance.
Using CameraX with DBR
If you use the Android CameraX SDK, DecodeWithCameraX sample will guide you on how to add barcode scanning to your app.