Search code examples
androidbarcodeqr-code

Barcode/Qr Code Reader for Android


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).


Solution

  • 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.