banner



How To Develop An App Reading Barcodes

Learn from this tutorial how to make Barcode Reader app in Android Studio version 1.4 in 10 steps: Step 1Create New Android Project with Application name "Barcode Reader" and Minimum SDK, API9: Android 2.3 (Gingerbread). Step 2 – Complete the code in activity_main.xml file: Create a button for pressing to scan.

<Button android:id="@+id/scan_button"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerHorizontal="true"     android:text="@string/scan" />

Add two Text Views to display your scanned information.

<TextView     android:id="@+id/scan_format"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:textIsSelectable="true"     android:layout_centerHorizontal="true"     android:layout_below="@id/scan_button" /> <TextView     android:id="@+id/scan_content"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:textIsSelectable="true"     android:layout_centerHorizontal="true"     android:layout_below="@id/scan_format" />

Step 3Add the button text "Scan" to strings.xml file.

            <            string            name            =            "scan"            >Scan</            string            >          

Step 4Create New Package with name "com.google.zxing.integration.android". Step 5Create New Java Class with name "IntentIntegrator". Step 6Create New Java Class with name "IntentResult". Project files:  Barcode Reader project files Step 7 – Complete the code in MainActivity.java

package com.example.toyo.barcodereader;  import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast;  public class MainActivity extends AppCompatActivity implements OnClickListener {     private Button scanBtn;     private TextView formatTxt, contentTxt;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          scanBtn = (Button)findViewById(R.id.scan_button);         formatTxt = (TextView)findViewById(R.id.scan_format);         contentTxt = (TextView)findViewById(R.id.scan_content);          scanBtn.setOnClickListener(this);     }      public void onClick(View v){         if(v.getId()==R.id.scan_button){             IntentIntegrator scanIntegrator = new IntentIntegrator(this);             scanIntegrator.initiateScan();         }     }      public void onActivityResult(int requestCode, int resultCode, Intent intent) {         IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);         if (scanningResult != null) {             String scanContent = scanningResult.getContents();             String scanFormat = scanningResult.getFormatName();             formatTxt.setText("FORMAT: " + scanFormat);             contentTxt.setText("CONTENT: " + scanContent);         }         else{             Toast toast = Toast.makeText(getApplicationContext(),                     "No scan data received!", Toast.LENGTH_SHORT);             toast.show();         }     } }

Step 8 – Complete the code in IntentIntegrator.java

package com.google.zxing.integration.android;  import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map;  import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Bundle; import android.util.Log;  public class IntentIntegrator {      public static final int REQUEST_CODE = 0x0000c0de; // Only use bottom 16 bits     private static final String TAG = IntentIntegrator.class.getSimpleName();      public static final String DEFAULT_TITLE = "Install Barcode Scanner?";     public static final String DEFAULT_MESSAGE =             "This application requires Barcode Scanner. Would you like to install it?";     public static final String DEFAULT_YES = "Yes";     public static final String DEFAULT_NO = "No";      private static final String BS_PACKAGE = "com.google.zxing.client.android";     private static final String BSPLUS_PACKAGE = "com.srowen.bs.android";      // supported barcode formats     public static final Collection<String> PRODUCT_CODE_TYPES = list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "RSS_14");     public static final Collection<String> ONE_D_CODE_TYPES =             list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "CODE_39", "CODE_93", "CODE_128",                     "ITF", "RSS_14", "RSS_EXPANDED");     public static final Collection<String> QR_CODE_TYPES = Collections.singleton("QR_CODE");     public static final Collection<String> DATA_MATRIX_TYPES = Collections.singleton("DATA_MATRIX");      public static final Collection<String> ALL_CODE_TYPES = null;      public static final List<String> TARGET_BARCODE_SCANNER_ONLY = Collections.singletonList(BS_PACKAGE);     public static final List<String> TARGET_ALL_KNOWN = list(             BS_PACKAGE, // Barcode Scanner             BSPLUS_PACKAGE, // Barcode Scanner+             BSPLUS_PACKAGE + ".simple" // Barcode Scanner+ Simple             // What else supports this intent?     );      private final Activity activity;     private String title;     private String message;     private String buttonYes;     private String buttonNo;     private List<String> targetApplications;     private final Map<String,Object> moreExtras;      public IntentIntegrator(Activity activity) {         this.activity = activity;         title = DEFAULT_TITLE;         message = DEFAULT_MESSAGE;         buttonYes = DEFAULT_YES;         buttonNo = DEFAULT_NO;         targetApplications = TARGET_ALL_KNOWN;         moreExtras = new HashMap<String,Object>(3);     }      public String getTitle() {         return title;     }      public void setTitle(String title) {         this.title = title;     }      public void setTitleByID(int titleID) {         title = activity.getString(titleID);     }      public String getMessage() {         return message;     }      public void setMessage(String message) {         this.message = message;     }      public void setMessageByID(int messageID) {         message = activity.getString(messageID);     }      public String getButtonYes() {         return buttonYes;     }      public void setButtonYes(String buttonYes) {         this.buttonYes = buttonYes;     }      public void setButtonYesByID(int buttonYesID) {         buttonYes = activity.getString(buttonYesID);     }      public String getButtonNo() {         return buttonNo;     }      public void setButtonNo(String buttonNo) {         this.buttonNo = buttonNo;     }      public void setButtonNoByID(int buttonNoID) {         buttonNo = activity.getString(buttonNoID);     }      public Collection<String> getTargetApplications() {         return targetApplications;     }      public final void setTargetApplications(List<String> targetApplications) {         if (targetApplications.isEmpty()) {             throw new IllegalArgumentException("No target applications");         }         this.targetApplications = targetApplications;     }      public void setSingleTargetApplication(String targetApplication) {         this.targetApplications = Collections.singletonList(targetApplication);     }      public Map<String,?> getMoreExtras() {         return moreExtras;     }      public final void addExtra(String key, Object value) {         moreExtras.put(key, value);     }       public final AlertDialog initiateScan() {         return initiateScan(ALL_CODE_TYPES);     }      public final AlertDialog initiateScan(Collection<String> desiredBarcodeFormats) {         Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");         intentScan.addCategory(Intent.CATEGORY_DEFAULT);          // check which types of codes to scan for         if (desiredBarcodeFormats != null) {             // set the desired barcode types             StringBuilder joinedByComma = new StringBuilder();             for (String format : desiredBarcodeFormats) {                 if (joinedByComma.length() > 0) {                     joinedByComma.append(',');                 }                 joinedByComma.append(format);             }             intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());         }           String targetAppPackage = findTargetAppPackage(intentScan);         if (targetAppPackage == null) {             return showDownloadDialog();         }         intentScan.setPackage(targetAppPackage);         intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);         intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);         attachMoreExtras(intentScan);         startActivityForResult(intentScan, REQUEST_CODE);         return null;     }       protected void startActivityForResult(Intent intent, int code) {         activity.startActivityForResult(intent, code);     }      private String findTargetAppPackage(Intent intent) {         PackageManager pm = activity.getPackageManager();         List<ResolveInfo> availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);         if (availableApps != null) {             for (ResolveInfo availableApp : availableApps) {                 String packageName = availableApp.activityInfo.packageName;                 if (targetApplications.contains(packageName)) {                     return packageName;                 }             }         }         return null;     }      private AlertDialog showDownloadDialog() {         AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);         downloadDialog.setTitle(title);         downloadDialog.setMessage(message);         downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {             @Override             public void onClick(DialogInterface dialogInterface, int i) {                 String packageName = targetApplications.get(0);                 Uri uri = Uri.parse("market://details?id=" + packageName);                 Intent intent = new Intent(Intent.ACTION_VIEW, uri);                 try {                     activity.startActivity(intent);                 } catch (ActivityNotFoundException anfe) {                     // Hmm, market is not installed                     Log.w(TAG, "Google Play is not installed; cannot install " + packageName);                 }             }         });         downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {             @Override             public void onClick(DialogInterface dialogInterface, int i) {}         });         return downloadDialog.show();     }      public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {         if (requestCode == REQUEST_CODE) {             if (resultCode == Activity.RESULT_OK) {                 String contents = intent.getStringExtra("SCAN_RESULT");                 String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");                 byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");                 int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);                 Integer orientation = intentOrientation == Integer.MIN_VALUE ? null : intentOrientation;                 String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");                 return new IntentResult(contents,                         formatName,                         rawBytes,                         orientation,                         errorCorrectionLevel);             }             return new IntentResult();         }         return null;     }      public final AlertDialog shareText(CharSequence text, CharSequence type) {         Intent intent = new Intent();         intent.addCategory(Intent.CATEGORY_DEFAULT);         intent.setAction(BS_PACKAGE + ".ENCODE");         intent.putExtra("ENCODE_TYPE", type);         intent.putExtra("ENCODE_DATA", text);         String targetAppPackage = findTargetAppPackage(intent);         if (targetAppPackage == null) {             return showDownloadDialog();         }         intent.setPackage(targetAppPackage);         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);         attachMoreExtras(intent);         activity.startActivity(intent);         return null;     }      private static List<String> list(String... values) {         return Collections.unmodifiableList(Arrays.asList(values));     }      private void attachMoreExtras(Intent intent) {         for (Map.Entry<String,Object> entry : moreExtras.entrySet()) {             String key = entry.getKey();             Object value = entry.getValue();             // Kind of hacky             if (value instanceof Integer) {                 intent.putExtra(key, (Integer) value);             } else if (value instanceof Long) {                 intent.putExtra(key, (Long) value);             } else if (value instanceof Boolean) {                 intent.putExtra(key, (Boolean) value);             } else if (value instanceof Double) {                 intent.putExtra(key, (Double) value);             } else if (value instanceof Float) {                 intent.putExtra(key, (Float) value);             } else if (value instanceof Bundle) {                 intent.putExtra(key, (Bundle) value);             } else {                 intent.putExtra(key, value.toString());             }         }     } }

Step 9 – Complete the code in IntentResult.java

package com.google.zxing.integration.android;   public final class IntentResult {      private final String contents;     private final String formatName;     private final byte[] rawBytes;     private final Integer orientation;     private final String errorCorrectionLevel;      IntentResult() {         this(null, null, null, null, null);     }      IntentResult(String contents,                  String formatName,                  byte[] rawBytes,                  Integer orientation,                  String errorCorrectionLevel) {         this.contents = contents;         this.formatName = formatName;         this.rawBytes = rawBytes;         this.orientation = orientation;         this.errorCorrectionLevel = errorCorrectionLevel;     }       public String getContents() {         return contents;     }       public String getFormatName() {         return formatName;     }       public byte[] getRawBytes() {         return rawBytes;     }       public Integer getOrientation() {         return orientation;     }       public String getErrorCorrectionLevel() {         return errorCorrectionLevel;     }      @Override     public String toString() {         StringBuilder dialogText = new StringBuilder(100);         dialogText.append("Format: ").append(formatName).append('\n');         dialogText.append("Contents: ").append(contents).append('\n');         int rawBytesLength = rawBytes == null ? 0 : rawBytes.length;         dialogText.append("Raw bytes: (").append(rawBytesLength).append(" bytes)\n");         dialogText.append("Orientation: ").append(orientation).append('\n');         dialogText.append("EC level: ").append(errorCorrectionLevel).append('\n');         return dialogText.toString();     }  }

Step 10Export app from Android Studio. Run your exported app on a device instead of an emulator and feel free to scan any barcode. Watch the video tutorial to create Barcode Reader app in Android Studio version 1.4:

For further questions leave a message. Exemple: scan this barcode Scan barcode You should see the text: found book FORMAT: EAN_13 CONTENT: 9780123456786 Download app-release.apk from here and install it on your device to scan barcodes.

How To Develop An App Reading Barcodes

Source: https://android-coffee.com/tutorial-how-to-create-barcode-reader-app-in-android-studio-1-4/

Posted by: micklethavite.blogspot.com

0 Response to "How To Develop An App Reading Barcodes"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel