Scan Barcode

Sering kita lihat diproduk-produk kemasan, terdapat garis-garis hitam putih seperti zebra cross. Itulah barcode. Barcode sendiri sebenarnya adalah representasi dari kumpulan angka, yang dibuat seperti batang untuk yang linear atau satu dimensi, dan ada yang dibuat berbentuk persegi, titik, hexagon atau bentuk geometri lainnya untuk yang 2 dimensi. Dengan adanya barcode, memungkinkan mesin untuk membaca angka.

Android sendiri dapat digunakan untuk membaca barcode. Dengan library dari ZXing, memungkinkan kamera dari android untuk men-scan barcode dan menampilkan hasilnya. Hasil yang didapat dari scan barcode ini dapat berupa content dan format dari barcode tersebut.

 

Library

Library yang akan kita gunakan untuk scan barcode ini adalah:

compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
compile 'com.google.zxing:core:3.2.0'

Dan tambahkan repository jCenter:

repositories {
    jcenter()
}

Seperti biasa, jangan lupa tambahkan appcompat:

compile 'com.android.support:appcompat-v7:23.0.1'

 

Tampilan

activity_main.xml (Design)

1

 

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Content:"
        android:id="@+id/content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:textSize="18sp"/>

    <TextView
        android:layout_below="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Type:"
        android:id="@+id/type"
        android:layout_alignParentLeft="true"
        android:textSize="18sp"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Scan Barcode"
        android:id="@+id/scan"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />




</RelativeLayout>

 

Kode

MainActivity.class
package heends.barcode.Activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import heends.barcode.R;

public class MainActivity extends AppCompatActivity {

    private Button mScan;
    private TextView mContent, mType;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mScan = (Button)findViewById(R.id.scan);
        mContent = (TextView)findViewById(R.id.content);
        mType = (TextView)findViewById(R.id.type);
        mContent.setVisibility(TextView.INVISIBLE);
        mType.setVisibility(TextView.INVISIBLE);
        mScan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mContent.setVisibility(TextView.INVISIBLE);
                mType.setVisibility(TextView.INVISIBLE);
                //Jika button diklik, akan mengirim intent untuk membuka kamera scanner
                IntentIntegrator scanIntegrator = new IntentIntegrator(MainActivity.this);
                scanIntegrator.initiateScan();
            }
        });

    }

    //Respon dari kamera scanner
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        //Jika hasil didapatkan
        if(scanningResult!=null){
            //Menyimpan content dan format ke string
            String scanContent = scanningResult.getContents();
            String scanFormat = scanningResult.getFormatName();
            mContent.setText("Content:\n" + scanContent);
            mType.setText("Type:\n" + scanFormat);
            mContent.setVisibility(TextView.VISIBLE);
            mType.setVisibility(TextView.VISIBLE);
        }else{
            //Menampilkan toast jika gagal
            Toast.makeText(getApplicationContext(),"Not found", Toast.LENGTH_SHORT).show();
            mContent.setVisibility(TextView.INVISIBLE);
            mType.setVisibility(TextView.INVISIBLE);
        }
    }
}

Sedikit sekali kode yang diperlukan untuk scan barcode ini. Karena yang bagian ribet-ribetnya sudah diracik sedemikian rupa dan dijadikan library, sehingga kita hanya perlu memanggil method-methodnya saja.