Cover Image for QR/Bar Code Scanner in Android
132 views

QR/Bar Code Scanner in Android

Implementing a QR code and barcode scanner in an Android app can be done using the Barcode Scanner library provided by Google Mobile Vision. Here’s a step-by-step guide on how to integrate a QR code and barcode scanner into your Android app:

1. Create a New Android Project:

Start by creating a new Android project or open an existing one in Android Studio.

2. Add Google Play Services Dependency:

To use the Barcode Scanner library, add the Google Play Services dependency to your app-level build.gradle file:

Java
implementation 'com.google.android.gms:play-services-vision:20.2.0'

Sync your project to download the dependency.

3. Design the User Interface:

Create a layout XML file for your scanner activity. You’ll typically include a SurfaceView or TextureView to display the camera preview and a Button to start the scanning process. Here’s an example layout (activity_scanner.xml):

XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".ScannerActivity">

    <SurfaceView
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/scanButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Scan"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="16dp" />
</RelativeLayout>

4. Create the ScannerActivity:

Create a new ScannerActivity or add the scanning functionality to an existing activity. In this activity, you’ll initialize the camera and set up the barcode scanner.

Java
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;

import java.io.IOException;

public class ScannerActivity extends AppCompatActivity {

    private SurfaceView cameraPreview;
    private CameraSource cameraSource;
    private Button scanButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scanner);

        cameraPreview = findViewById(R.id.cameraPreview);
        scanButton = findViewById(R.id.scanButton);

        // Initialize the barcode detector
        BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this)
                .setBarcodeFormats(Barcode.QR_CODE | Barcode.CODE_128)
                .build();

        // Initialize the camera source and set the camera preview
        cameraSource = new CameraSource.Builder(this, barcodeDetector)
                .setRequestedPreviewSize(640, 480)
                .setAutoFocusEnabled(true)
                .build();

        // Set up the scanner callback
        barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
            @Override
            public void release() {
            }

            @Override
            public void receiveDetections(Detector.Detections<Barcode> detections) {
                // Process detected barcodes here
                final SparseArray<Barcode> barcodes = detections.getDetectedItems();
                if (barcodes.size() > 0) {
                    // Barcode(s) detected
                    String barcodeData = barcodes.valueAt(0).displayValue;
                    // Handle the barcode data as needed
                }
            }
        });

        // Set click listener for the scan button
        scanButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Start the camera preview and scanning process
                startCamera();
            }
        });
    }

    private void startCamera() {
        try {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                cameraSource.start(cameraPreview.getHolder());
            } else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 123);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 123 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            startCamera();
        }
    }
}

5. Request Camera Permission:

The code above requests camera permission when the “Scan” button is clicked. Make sure to add the necessary permissions in your AndroidManifest.xml file:

XML
<uses-permission android:name="android.permission.CAMERA" />

6. Handle Scanned Data:

In the receiveDetections method, you can access the scanned barcode data. You can implement the logic to handle the scanned data as needed, such as displaying it in a text view or performing some action based on the data.

7. Test Your Scanner:

Run the app on an Android device with a camera. When you click the “Scan” button, the camera preview will start, and it will attempt to detect QR codes and CODE_128 barcodes. When a valid barcode is detected, you can implement the logic to handle the data.

You’ve integrated a QR code and barcode scanner into your Android app. You can customize the scanner further by modifying the layout and handling scanned data according to your application’s requirements.

YOU MAY ALSO LIKE...

The Tech Thunder

The Tech Thunder

The Tech Thunder


COMMENTS