แต่จะมีคนรู้หรือสงสัยเบื้องลึกๆของมันหรือไม่ว่า มันถูกสร้างมาอย่างไร มันถูกออกแบบมาเพื่ออะไร มีประโยชน์อะไรบ้าง อย่างเช่น
ร่วมสนับสนุนนักเขียนด้วยการคลิ๊กลิ้ง ด้านล่าง ขอบคุณครับ รับรองไม่มีไวรัส
ถ้าจะสรุปออกมาว่าบาร์โค๊ดคืออะไร แบบวิชาการหน่อยก็
บาร์โค้ด หมายถึง "เลขหมายประจำตัวสินค้า ใช้แทนด้วยแท่งบาร์ขาว-ดำ เรียงเข้าด้วยกัน และประกอบด้วยตัวเลข 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/