מאמר
מאמר: כיצד מוסיפים סורק ברקודים לאפליקציית אנדרואיד
מאמר: כיצד מוסיפים סורק ברקודים לאפליקציית אנדרואיד
מפתחים אפליקציית אנדרואיד עבורכם או עבור בית תוכנה בו אתם עובדים, וצריכים להוסיף סורק ברקודים אשר יהיה ניתן לתמרן עם תוצאות הסריקה שתחזיר הסריקה? כיצד תוכלו לבצע זאת, באיזה תוכנה להשתמש? האם ישנה בנייה חינמית של התוכנה שתוכלו להשתמש בה באפליקציה שלכם?
התבקשנו להוסיף סורק ברקודים לאפליקציה של חברתנו Prog4biz, העוסקת בפיתוח תוכנה. הסורק צריך לסרוק ברקוד, להחזיר את המספר שנסרק ואז נוכל לתמרן בתוך האפליקציה עם המספר שיוחזר אלינו.
במאמר זה נסביר כיצד זה נעשה בפועל, באיזו תוכנה השתמשנו וניתן מושג בסיסי לאחד הפתרונות הקיימים. כמו בדרך כלל, בפיתוח אפליקציות שונות, ישנם כמה פתרונות לבעיה, אולם מאמר זה ייתן סקירה של אחד הפתרונות שנמצאו כמתאימים לצרכינו בצורה אופטימלית. בעיקרון מה שהאפליקציה עושה, היא פותחת אפליקציית הסריקה חיצונית, סורקת את הברקוד ומחזירה לנו את המספר שנסרק.
להלן פירוט הצעדים:
1. ישנו קוד פתוח ל-sdk הנקרא ZXing אשר ניתן למצוא באתר הבא;
http://mobile.tutsplus.com/tutorials/android/android-sdk-create-a-barcode-reader/.
יש להוריד את קבצי המקור הנמצאים באתר. ניתן גם לעבור על ההדרכה הקיימת באתר אשר מסבירה כיצד לבנות אפליקציה מאפס עבור סורק הברקודים בלבד. אם זאת האפליקציה הראשונה שלכם, מומלץ לעבור על ההדרכה שבאתר כדי לראות איך הברקוד עובד בצורה עצמאית. באפליקציה שפיתחנו שילבנו את הסורק ביחד עם webview. זהו view אשר נותן אפשרות לפתוח אתר בתוך האפליקציה במקום בדפדפן.
2. באפלקיציה שלנו ישנו activity ראשי אשר פותח webview, ממנו אנו קוראים ל-activity שפותח את סורק הברקודים. תחת אותו ה-package יצרנו מחלקה חדשה (תתנו לה כל שם שתרצו) והעתקנו אליה את תוכן המחלקה MainActivity.java אשר נמצאת בקבצי המקור.
3. לאחר מכן, תחת קובץ ה-"src", הוספנו package נוסף שקראנו לו "com.google.zxing.integration.android" ואליו הוספנו את המחלקות IntentIntegrator.java ו- IntentResult.java אשר גם הם נמצאים בקבצי המקור אשר הורדנו מהאתר.
4. אח"כ, תחת קובץ ה-"res", הוספנו קובץ xml תחת הקובץ "layout" עבור ה-view של ה-activity של סורק הברקודים, אותו MainActivity.java בקבצי המקור. בקבצי המקור, קובץ ה-xml הזה נקרא activity_main.xml. לצרכים שלנו היינו צריכים לפתוח את הסורק בלחיצה על כפתור מה-activity הראשי שלנו, לכן הסרנו את כל הכפתורים ואיזורי הטקסט שהיו ב-view של סורק הברקודים (אותו activity_main.xml). להלן הקוד של קובץ ה-xml שלנו;
<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" >
</RelativeLayout>
5. ב-activity הראשי, כאשר אנו לוחצים על הכפתור אשר קורא ל-activity של סורק הברקודים, אנו קוראים לו בעזרת הקוד הבא;
Intent intent = new Intent(this, BarCodeScanningApp.class);
myRequestCode = 1;
startActivityForResult(intent, myRequestCode);
מה שאנו עושים כאן זה לשלוח intent של ה-activity הראשי שלנו ל-activity של סורק הברקודים עם בקשה לקבל ממנו תוצאה.
6. כדי לטפל בתוצאה שחוזרת, משתמשים במתודה הבאה;
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == myRequestCode) {
if (resultCode == RESULT_OK) {
barcodeValue = data.getStringExtra("barcode");
Toast toast = Toast.makeText(getApplicationContext(), barcodeValue, Toast.LENGTH_SHORT);
toast.show();
}
}
}
אנו בודקים האם requestCode שווה ל-1 (myRequestCode מוגדר אצלי כ-1). אם כן, אנו בודקים האם resultCode תקין ורק אז לוקחים את ערך הסריקה מתוך ה-data ששמרנו בתוך מחרוזת שהכרזנו עליה ב-activity של סורק הברקודים (מיד נראה כיצד).
7. ב-activity של סורק הברקודים שינינו מספר דברים מקובץ המקור MainActivity.java. מחקנו את הפונקציאונליות של הכפתור (מאחר ולא היינו זקוקים לו), והוספנו את ההחזרה של הערך הנסרק. להלן הקוד של ה-activity שלנו;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
public class BarCodeScanningApp extends Activity {
private IntentIntegrator integrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bar_code_scanning_app);
scanBarcode();
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode,
resultCode, intent);
if (scanResult != null) {
String scanContent = scanResult.getContents();
Intent resultData = new Intent();
resultData.putExtra("barcode", scanContent);
setResult(Activity.RESULT_OK, resultData);
finish();
}
else {
Toast toast = Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT);
toast.show();
}
}
public void scanBarcode() {
integrator = new IntentIntegrator(this);
integrator.initiateScan();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
כאן הסורק נפתח ברגע הקריאה ל-activity() (ה-scanBarcode נקרא מתוך המתודה onCreate()). אם במכשיר שלכם לא קיימת אפליקציית הסריקה החיצונית, אתם תתבקשו להתקין אותה. לאחר ההתקנה תוכלו להתחיל לסרוק ברקודים. אם הסריקה הצליחה, הערך של הסריקה יוחזר ל-activity הראשי ממנו התבצעה הקריאה בתוך intent, השמור כמיפוי הידוע כ-"key value pair" הנשמר בשם "barcode" (אתם יכולים לתת לו שם אחר, רק תדאגו לקרוא לו גם כן באותו השם ב-activity הראשי). אנחנו גם רוצים לעדכן את ה-activity הראשי שהסריקה הצליחה, לשם כך אנחנו שומרים את הערך Activity.RESULT_OK בתוך ה-intent שאנחנו מחזירים כ-resultData.
כעת אנחנו יכולים לסרוק ברקודים עם האפליקציה שלנו ולעשות כל מה שאנחנו צריכים עם התוצאה המוחזרת. מקווה שהצלחנו לעזור לכם במאמר זה, והצלחתם ליצור סורק ברקודים באפליקציה שלכם.
אנחנו נקשיב, נאפיין ונפתח עבורך תוכנה בהתאמה אישית התפורה לצרכים ותקציב שלך.
צור קשר עוד היום בטלפון 077-7944044 וספר לנו על הפרוייקט שלך!