QR code scanner using ZXing Library in Android

In this blog, we’re going to discuss how a scan QR code using the ZXing library in Android. Before going to implement the actual code first, let’s understand what is ZXing library.

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.

QR code scanner example

dependencies {
implementation ‘com.google.zxing:core:<latest:version>’
implementation(‘com.journeyapps:zxing-android-embedded:3.6.0’) { transitive = false }
}

activity_main.xml

<?xml version=”1.0" encoding=”utf-8"?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android"
xmlns:app=”http://schemas.android.com/apk/res-auto"
xmlns:tools=”http://schemas.android.com/tools"
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”
android:orientation=”vertical”
android:layout_gravity=”center”
android:background=”#fff”
>

<
LinearLayout
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”250dp”
android:background=”@drawable/geadient_background”
>

<
TextView
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:fontFamily=”@font/asap_bold”
android:text=”@string/qr_code”
android:textColor=”#ffffff”
android:textSize=”32sp”
android:layout_marginTop=”80dp”
android:layout_marginStart=”16dp”
android:textStyle=”bold”
/>

<
TextView
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_marginStart=”16dp”
android:fontFamily=”@font/asap”
android:text=”@string/scanner”
android:textColor=”#FFFFFF”
android:textSize=”24sp”
/>

</
LinearLayout>

<
Button
android:layout_width=”250dp”
android:layout_height=”wrap_content”
android:id=”@+id/scan”
android:padding=”4dp”
android:layout_marginTop=”20sp”
android:layout_gravity=”center”
android:text=”Scan”
android:fontFamily=”@font/asap_bold”
android:textSize=”19sp”
android:textStyle=”bold”
android:textColor=”#ffffff”
android:background=”@drawable/button_background”
/>

</
LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
private Button scan;

scan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { IntentIntegrator intentIntegrator = new IntentIntegrator(MainActivity.this); intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE); intentIntegrator.setCameraId(0); intentIntegrator.setOrientationLocked(false); intentIntegrator.setPrompt(“scanning”); intentIntegrator.setBeepEnabled(true); intentIntegrator.setBarcodeImageEnabled(true); intentIntegrator.initiateScan();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (result != null && result.getContents() != null) {
new AlertDialog.Builder(MainActivity.this).setTitle(“Scan Result”) .setMessage(result.getContents()) .setPositiveButton(“Copy”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { ClipboardManager manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipData data = ClipData.newPlainText(“result”, result.getContents()); manager.setPrimaryClip(data); }
}).setNegativeButton(
“Cancel”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).create().show();
}
super.onActivityResult(requestCode, resultCode, data);
}
}

Output: