In this tutorial, we will learn to integrate ZXing lib into an Android app. Let us first get some idea about ZXing.
ZXing
ZXing (“zebra crossing”) is an open-source, multi-format 1D/2D barcode image processing library implemented in Java, with ports to other languages. ZXing is also hosted under Google Open Source Project.
The latest version up to this date is 3.3.3. Modules in this release we need to focus on are –
Modules | Description |
---|---|
core | The core image decoding library, and test code (Java lib) |
android | Android app also available on Play Store Barcode Scanner |
android-core | Android-related code shared among android, other Android apps |
android-integration | Supports integration with Barcode Scanner via Intent |
All the modules are available on Maven Central –
Integration
Let’s say we want to integrate ZXing in our app called QR Code Scanner Android. Now the problem is that android
module is actually an Android application and not an Android library. So to use the ZXing lib as advocated by ZXing themselves, we have the following options –
- Install Barcode Scanner app first and then use
android-integration
andandroid-core
for Integration.Or - Integrate code using
android-integration
andandroid-core
, if Barcode Scanner app is not installed then pop up would display to install the app first.
Obviously, both these options depend upon the Barcode Scanner app. So to overcome this dependency JourneyApps has come up with ZXing Android Embedded which is loosely based on the ZXing Android Barcode Scanner application but an with the official ZXing project.
ZXing Android Embedded is available on bintray –
So this tutorial is based on integrating the ZXing Android Embedded library in our QR Code Scanner app. You can find the source code of this tutorial on QR Code Scanner. Let’s start the integration. From version 3.6.0, only Android SDK 19+ is supported by default.
Dependency
repositories {
jcenter()
} dependencies {
implementation 'com.journeyapps:zxing-android-embedded:3.6.0' }
For Android 14+ support, see this link.
Code
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button_scan_qr_code.setOnClickListener {
IntentIntegrator(this).initiateScan()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (result != null) {
if (result.contents == null) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this, "Scanned: " + result.contents, Toast.LENGTH_LONG).show()
}
}
}
}
On click of button_scan_qr_code
, CaptureActivity
will start scanning using default camera. Once it scans any QR code, it sends back the result to onActivityResult
the MainActivity
.
ZXing also provides online QR Code Generator. Enter the required fields, generate and scan it to get the results.
ZXing Android Embedded lib also provides various customization –
For more advanced options do have a look at their Sample application.
That’s it for this tutorial. Thanks to the ZXing authors for Java library and ZXing Android Embedded to make this integration easy. Enjoy scanning the QR code. ????