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

The latest version up to this date is 3.3.3.

QR code scanner example

Dependency

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

Code

<?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: