/* scrip for google analytic */

Ads 468x60px

วันพฤหัสบดีที่ 5 พฤศจิกายน พ.ศ. 2558

[Project] แอพพลิเคชั่นสแกนบาร์โค๊ดลงฐานข้อมูลด้วยระบบแอนดรอยด์ (1)

บาร์โค๊ดคืออะไร หลายๆคนคงเคยเห็นกันอยู่แล้ว เพราะมันอยู่ในชีวิตประจำตัวเราไม่ใกล้ไม่ไกล เรานี้เอง ไม่ว่าเราจะไปกินอาหาร ซื้อขนม ซื้อนม ซื้อเนย จิปาถะ สินค้าบางตัวก็จะมีติดมากับห่อของมัน หรือ บางทีตอนเราจ่ายเงินค่าอาหารบางร้านก็จะมีบาร์โค๊ด แทรกมาที่ใบเสร็จให้เราอีกด้วย 



แต่จะมีคนรู้หรือสงสัยเบื้องลึกๆของมันหรือไม่ว่า มันถูกสร้างมาอย่างไร มันถูกออกแบบมาเพื่ออะไร มีประโยชน์อะไรบ้าง อย่างเช่น





มันถูกนำมาใช้ประโยชน์ในเรื่องของ การจำหรือการจัดหมวดหมู่ ให้กับทางด้านธุรกิจได้อย่างดีเยี่ยม เวลาที่เราเข้า 7-11 เลือกสินค้าเสร็จ ก็เอามาให้คนขาย เราก็จะเห็น ปืนเลเซอร์ มายิง ดัง "ปิ้ด ปิ้ด" เสร็จ จ่ายตังค์ จบกระบวนการ ซื้อ-ขาย อย่างง่ายดาย หรือเคาท์เตอร์เซอร์วิสเกิดขึ้นมาเพื่อเพิ่มช่องทางในการจ่ายเงินของพ่อค้าหัวใส เช่น มีจดหมายค่าน้ำ ค่าไฟ สมัยนี้ง่ายดาย เห็นบาร์โค๊ด เข้า 7-11 หรือที่ไหนก็ได้ที่มีสัญลักษณ์ เคาท์เตอร์เซอรวิส ยิงบาร์โค๊ด ชำระเงิน จบ รวดเร็ว จริงๆ เรื่องเสียเงิน หึหึ


ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส



ถ้าจะสรุปออกมาว่าบาร์โค๊ดคืออะไร แบบวิชาการหน่อยก็ 

บาร์โค้ด หมายถึง "เลขหมายประจำตัวสินค้า ใช้แทนด้วยแท่งบาร์ขาว-ดำ เรียงเข้าด้วยกัน และประกอบด้วยตัวเลข 8-13 หลัก สามารถอ่านได้ด้วยเครื่องสแกนเนอร์ โดยอาศัยหลักของการสะท้อนแสง นิยมใชักับสินค้าอุปโภคบริโภคแทบทุกชนิด และสินค้าสำเร็จรูปต่าง ๆ"

มีประโยชน์หลายอย่าง ได้แก่
1. ลดขั้นตอนและประหยัดเวลาการทำงาน
2. มีความสะดวกรวดเร็วมากขึ้น โดยเฉพาะการรับชำระเงิน การออกใบเสร็จ การตัดสินค้าคงคลัง
3. ง่ายต่อระบบสินค้าคงคลังคอมพิวเตอร์ซึ่งเชื่อมกับเครื่องสแกนเนอร์จะตัดยอดสินค้าโดยอัตโนมัติ 
4. เพิ่มประสิทธิภาพการบริหารสินค้า
5. บริหารงานด้านการผลิต การจัดซื้อ และการตลาดได้อย่างรวดเร็ว และมีประสิทธิภาพ   

ในบทความนี้ ผู้เขียนคงไม่ได้อธิบายรายละเอียดของการสร้างบาร์โค๊ดมากนัก แต่ถ้าผู้มีสนใจอยากรู้รายละเอียดที่มากขึ้น ผู้เขียนแนะนำ เว็บไซต์นี้
เพราะผู้เขียนคิดว่าเว็บไซน์นี้ค่อนข้างระเอียด ที่จะได้ความรู้เกี่ยวกับบาร์โค๊ด ในบทความนี้ผู้เขียนจะ ออกไปทางออกแบบนำเอามาประยุกษ์ใช้ซะมากกว่า ในโปรเจคนี้ จะพัฒนาแอพพลิเคชั่นบนมือถือระบบ Android ใช้ภาษา JAVA 

เครื่องมือที่ใช้พัฒนาได้แก่ 

Android Studio
Asus zenfone 5 android 4.4.2

แนวคิดการออกแบบคือต้องการจะเก็บข้อมูลสินค้า ด้วยการสแกนบาร์โค๊ดจาก บาร์โค๊ดตามสินค้าที่ซื้อเอาไว้ เพื่อเก็บลงฐานข้อมูล และสามารถที่จะสแกนได้อีกครั้งในภายหลัง โดยเมื่อสแกนเสร็จสามารถคิดราคารวมได้

โดยออกแบบหน้าตาของแอพพลิเคชั่นเบื้องต้นไว้ ตามภาพด้านล่าง



ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส



ในส่วนของ GUI







ไฟล์ XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="169dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan barcode for calculate"
android:layout_marginTop="40dp"
android:id="@+id/text"
android:layout_gravity="center_horizontal" />

<Button
android:layout_width="230dp"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="สแกนบันทึกข้อมูลสินค้า"
android:onClick="scanBar"
android:id="@+id/scan_barcode_input"
android:layout_gravity="center_horizontal" />
</LinearLayout>

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="174dp">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="สแกนคำนวนสินค้านวนสินค้า"
android:id="@+id/scan_barcode_caluclation"
android:layout_gravity="center_horizontal" />

</LinearLayout>

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="แนะนำ sheepcodeblog.blogspot.com"
android:id="@+id/go"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</LinearLayout>



ในส่วน class mainactivity 

 
แอพพลิเคชั่น Barcode Scanner 



final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";

สร้างตัวแปรขึ้นมาเก็บ ข้อความสตริงของพาทของแอพพลิเคชั่น สแกนบาร์โค๊ด ขึ้นมา แอพพลิเคชั่นตัวนี้เป็น open source สามารถดาวน์โหลด Library มาได้ แต่ส่วนตัวผู้เขียนคิดใช้วิธี ดาวน์โปรแกรมมาใช้ แล้วเรียกใช้ด้วยวิธี intent จะดีกว่า เพราะไม่จำเป็นต้องพัฒนาเอง

method scanBer

public void scanBar (View v){
    try{
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
        startActivityForResult(intent, 0);
    }
    catch (ActivityNotFoundException anfe){
        showDialog(MainActivity.this, "No Scanner Found"
        "Download a scanner code activity?","Yes","No").show();
    }
}
 
scanBar method ทำหน้าที่ intent เพื่อกระโดดไปใช้แอพ Barcode Scanner

ใช้การตรวจสอบด้วย Try Catch ถ้ายังไม่มีแอพ Barcode Scanner ให้ถามว่าจะ Download หรือไม่
ใน methode ถัดไป method showDialog

public static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo){
    AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
    downloadDialog.setTitle(title);
    downloadDialog.setMessage(message);
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
        @Override        public void onClick(DialogInterface dialogInterface, int i) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try{
                act.startActivity(intent);
            }
            catch (ActivityNotFoundException anfe){

            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
        @Override        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    return downloadDialog.show();
}

โดยที่ setPositiveButton  คือ กดปุ่ม Dialog ที่เด้งขึ้นมาถาม ในปุ่ม ใช่ ตรงกันข้าม setNegativeButton คือ ปุ่มไม่

สุดท้ายเป็น method ที่รับค่าคืนด้วย intent มาจากแอพ Barcode Scanner มาเก็บ ในตัวแปร content เราก็เอาตัวแปรตัวนี้ ไปทำการเก็บเช่น เก็บลง database

public void onActivityResult(int requestCode, int resultCode, Intent intent){
    if(requestCode == 0){
        if(resultCode == RESULT_OK){
            String content = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
        }
    }
}


SCAN_RESULT , SCAN_RESULT_FORMAT คือ ค่าคงที่ ที่เก็บอยู่ใน keyword ที่รับค่า
มาจากแอพ Barcode Scanner
 





ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส



บทความถัดไป จะเอาเก็บลง database พร้อม ใส่ระบุรายละเอียดสินค้า เช่น ชื่อ, ราคา, และวันที่

package com.blogspot.sheepcodeblog.scannerbarcodetodatabase;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";

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

    public void scanBar (View v){
        try{
            Intent intent = new Intent(ACTION_SCAN);
            intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
            startActivityForResult(intent, 0);
        }
        catch (ActivityNotFoundException anfe){
            showDialog(MainActivity.this, "No Scanner Found", "Download a scanner code activity?","Yes","No").show();
        }
    }


    public static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo){
        AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
        downloadDialog.setTitle(title);
        downloadDialog.setMessage(message);
        downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
            @Override            public void onClick(DialogInterface dialogInterface, int i) {
                Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                try{
                    act.startActivity(intent);
                }
                catch (ActivityNotFoundException anfe){

                }
            }
        });
        downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
            @Override            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        return downloadDialog.show();
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent){
        if(requestCode == 0){
            if(resultCode == RESULT_OK){
                String content = intent.getStringExtra("SCAN_RESULT");
                //String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                            }
        }
    }
}


Referrence 


http://www.pen1.biz/TipBarcode.html 
http://www.dek-d.com/board/view/1462138/ 
http://www.rightsoftcorp.com/?name=news&file=readnews&id=8 
http://tamanmohamed.blogspot.com/2012/02/barcode-professional-java-bar-code-api.html
http://examples.javacodegeeks.com/android/android-barcode-and-qr-scanner-example/

 
 
Blogger Templates