Barcode/Qr Code Reader for Android

10,762

Solution 1

I used zxing to build into my application. You will need a bit of coding. First include core.jar , its at core/core.jar,in your build path, then go to their client ,its at android/..../com.google.zxing, and get their code(This is not recommended by the devs, because your copy and pasting.) last, Add this code:

   package com.wtsang02.activities;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Reader;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
import com.google.zxing.common.HybridBinarizer;


public class QRDecoder extends Activity implements OnClickListener {

    private String text;
    private Button webbutton;
    private Bitmap bmp;
    private ImageView ivPicture;
    private TextView textv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mysales);
        webbutton = (Button)findViewById(R.id.webbutton);

        ivPicture = (ImageView) findViewById(R.id.ivPicture);
        textv= (TextView) findViewById(R.id.mytext);

        webbutton.setOnClickListener(this);
    }

    private void decode() {


        if (bmp == null) {
            Log.i("tag", "wtf");
        }
        bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);

        int[] intArray = new int[bmp.getWidth() * bmp.getHeight()];
        bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(),
                bmp.getHeight());

        LuminanceSource source = new com.google.zxing.RGBLuminanceSource(
                bmp.getWidth(), bmp.getHeight(), intArray);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Reader reader = new MultiFormatReader();
        try {
            Result result = reader.decode(bitmap);

            text = result.getText();
            byte[] rawBytes = result.getRawBytes();
            BarcodeFormat format = result.getBarcodeFormat();
            ResultPoint[] points = result.getResultPoints();
            textv.setText(text);

        } catch (NotFoundException e) {

            e.printStackTrace();
        } catch (ChecksumException e) {

            e.printStackTrace();
        } catch (FormatException e) {

            e.printStackTrace();

        }
        Log.i("done", "done");
        if(text!=null)
        Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show();
        else{
            Toast.makeText(getBaseContext(), "QQ", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onClick(View v) {

        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            ivPicture.setImageBitmap(bmp);
            decode();
        }

    }

}

This code will use your phone's default camera, if you need to use their client, you will need to start their CaptureActivity, Your layout should include a TextView to show results, ImageView to show the image you captured, and Button to start the camera. . This is based off of 2.1zxing.

Solution 2

You can use:

Share:
10,762

Related videos on Youtube

user1437481
Author by

user1437481

Updated on September 19, 2022

Comments

  • user1437481
    user1437481 over 1 year

    i would like to implement a QR Code/Barcode reader within my application. I would like to know what is the most lightweight solution to do this (disregarding intent integrator from zxing).

    • kjurkovic
      kjurkovic over 11 years
      what is wrong with intent integrator from zxing?
    • user1437481
      user1437481 over 11 years
      i dont want users to leave the app in order to download barcode scanner, i want a solution within the app
    • Adrián Rodríguez
      Adrián Rodríguez over 11 years
      you can use zxing as part of your application. Just add it as a library and use it calling the capture intent.
  • user1437481
    user1437481 over 11 years
    going to give it a try in a minute
  • user1437481
    user1437481 over 11 years
    get what code from the client?i misunderstood that part
  • Sean Owen
    Sean Owen over 11 years
    +1 for showing how to build a simple new app instead of copying the Barcode Scanner app totally.
  • wtsang02
    wtsang02 over 11 years
    updated the post, where i state the location. Its basiclly all in the zip file, where you downloaded zxing2.1
  • user1437481
    user1437481 over 11 years
    cant seem to pick QR or BARCODE only on this one
  • tejas
    tejas about 11 years
    This code throws me exception as soon as it starts and app crashes :(
  • tejas
    tejas about 11 years
    com.google.zxing.NotFoundException, i was asked to add this exception while writing the lines LuminanceSource source = new RGBLuminanceSource(200, 200, intArray); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); Result result = reader.decode(bitmap);
  • tejas
    tejas about 11 years
    While I debugged for it, I found that bitmap object is null I mean matrix is null in that. So it is throwing exception while decoding it at Result result = reader.decode(bitmap);
  • tejas
    tejas about 11 years
    I have followed exact steps mentioned by you.Image is getting captured and is setting to the imageview but only while decoding it gives me the problem and string text becomes null and else block is executed
  • wtsang02
    wtsang02 about 11 years
    If you get NotFoundExcetion , 2 reasons, 1) have you correctly import the library? 2) have you added the Activity to your manifest? Since this exact code works on my device, I don't think the code is the problem.