Creating Barcode Scanner app in android


 

I have made an Android application using the ZXing APIs and embedded only the decoding code into my application. The input to this decoder was given through the SD card of the Android emulator.

Here are the steps:

  1. First, I created an AVD(emulator) version 4 in my Eclipse IDE with the SDcard and Camera features turned ON.

  2. Next, I have created an SDCard using the commands below in the command prompt:

    c:\>mksdcard 40M mysdcard.iso

where 40M is the size of the SD card that i have created..This will be saved in the C: drive. Note, the .iso part is important.

  1. Next, we have to mount the SD card into the emulator using the commands below in the command prompt:

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4

Here myavd4 is the name of the emulator/android virtual device that I created in step 1. The ‘@’ sign before the avd name is important too.

Keep the emulator running all the time..If it gets closed, we have to redo the above 3 steps.

  1. We can push the QR code or other code images that we have to this SD card mounted on our emulator by using the commands below in the command prompt:

    c:\>adb push "c:\myqrcode.png" /sdcard
  2. Next, in the Eclipse IDE, start a new android project. The code below should be pasted in the QRDecoder.java file of our project.

    package com.example.palani;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;
    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.client.androidtest.RGBLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    public class QRDecoder extends Activity implements OnClickListener {
        public static class Global
        {
            public static String text=null;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png");
            TextView textv = (TextView) findViewById(R.id.mytext);
            View webbutton=findViewById(R.id.webbutton);
            LuminanceSource source = new RGBLuminanceSource(bMap);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            Reader reader = new MultiFormatReader();
            try {
                 Result result = reader.decode(bitmap);
                 Global.text = result.getText();
                    byte[] rawBytes = result.getRawBytes();
                    BarcodeFormat format = result.getBarcodeFormat();
                    ResultPoint[] points = result.getResultPoints();
                    textv.setText(Global.text);
                    webbutton.setOnClickListener(this);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ChecksumException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FormatException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();


            }  
        }

        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(Global.text);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);

        }

    }
  3. Next I downloaded the ZXing Source Code (ZXing-1.6.zip) from the below link.

    http://code.google.com/p/zxing/downloads/list

Then, extract this and navigate to D:\zxing-1.6\core\src\com

copy the com folder and paste it in our package in Eclipse.

(Note, right click on the package of our project and paste…if it asks for replacing the existing folder, select yes)

  1. Next, copy and paste the below code in the res/layout/main.xml file

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="20dip"
        >

    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:textColor="@color/mbackground1"
    android:gravity="center_horizontal"
    android:text="@string/decode_label"
    android:padding="20dip"
    />

    <TextView
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@color/mbackground2"
    android:textColor="@color/mytextcolor"
    android:padding="20dip"
    />


     <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/continue_label"
    android:gravity="center_horizontal"
    android:textColor="@color/mytextcolor"
    android:padding="20dip"
    />

    <Button
    android:id="@+id/webbutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/web_button"
    android:textColor="@color/mytextcolor"
    />

    </LinearLayout>
  2. Next, copy and paste the below code in the res/values/strings.xml file

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, QRDecoder!</string>
        <string name="app_name">QRDecoder</string>
        <string name="continue_label">Click below to load the URL!!</string>
        <string name="web_button">Load the URL!!</string>
        <string name="decode_label">Decoded URL</string>

    </resources>
  3. Next, copy and paste the below code in the res/values/color.xml file, if it does not exist, create one.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
  4. Next, copy and paste the below code in the manifest file after the opening tag

    <manifest>


    <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />      
  5. So, these above steps done…our application is ready. Now, u can run the application and it will give u the decoded result of the input image we have given.

  6. In order to change the input, push another file to SD card using the command below in the command prompt

    c:\>adb push "c:\image2.png" /sdcard

and change the input in our QRDecoder.java to reflect the same

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");

the inputs can be any format like QRCode, Barcode, etc….the types of image can be bmp, jpg or png.

I used the below website for generating the QR codes for test purpose

http://barcode.tec-it.com/

AND 

http://qrcode.kaywa.com

Thanks and I would like to mention the point that I am just a beginner in android and mobile application development and sorry for any mistakes that I might have done…

Copy/Paste from http://stackoverflow.com/questions/4854442/embed-zxing-library-without-using-barcode-scanner-app

 

Advertisements
By beatsoftech

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s