کتابخانه ZXing اندروید – ساخت بارکد خوان در اندروید

کتابخانه ZXing اندروید – ساخت بارکد خوان در اندروید

آموزش ساخت بارکد خوان در اندروید با کتابخانه ZXing


ZXing، یک کتابخانه‌ی باکدخوان (barcode scanning) برای جاوا و اندروید می‌باشد که می‌تواند بارکدهای نوع 1D/2D را پردازش کند.

فرمت‌های پشتیبانی این کتابخانه، به شرح زیر می‌باشد:

1D product 1D industrial 2D
UPC-A Code 39 QR Code
UPC-E Code 93 Data Matrix
EAN-8 Code 128 Aztec (beta)
EAN-13 Codabar PDF 417 (beta)
ITF MaxiCode
RSS-14
RSS-Expanded
در حال حاظر، نسخه‌ی تاریگت اندروید این کتابخانه برابر 22 یا اندروید 5.1 می‌باشد.

راه اندازی ZXing

فایل Gradle خود را به صورت زیر تکمیل کنید:

repositories {
    jcenter()
}

dependencies {
    compile('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.google.zxing:core:3.3.3'
}

android {
    buildToolsVersion '27.0.3'
}

توجه داشته باشید که ورژن appcompat بایستی بالای 23 به بالا باشد.
همچنین ورژن buoldTool نیز باید بالای 27.0.3 باشد؛ در غیر اینصورت ممکن است خطای کامپایل رخ دهد.


ویژگی hardwareAccelerated بایستی به تگ application موجود در فایل AndroidManifest.xml و به صورت زیر اضافه شود:

<application android:hardwareAccelerated="true" ... >

توجه داشته باشید که دسترسی‌های مورد نیاز در خود zxing تنظیم شده‌اند و ممکن است در بین آن‌ها، دسترسی‌های خطرناک اندروید مارشمالو به بالا نیز قرار داشته باشند که بایستی موقع اجرای برنامه از کاربر تقاضا شود: (از جمله دسترسی به دوربین)

<uses-permission android:name="android.permission.CAMERA"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.FLASHLIGHT"/>
  <uses-permission android:name="android.permission.READ_CONTACTS"/>
  <!-- unavailable in API 23 -->
  <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

  <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22"/>

  <uses-feature android:name="android.hardware.camera.any"/>
  <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
  <uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
  <uses-feature android:name="android.hardware.screen.landscape"/>
<uses-feature android:name="android.hardware.wifi" android:required="false"/>

 

روش استفاده

فرض کنید در  یک اکتیویتی قرار داریم؛ با استفاده از دستور زیر می‌توان بارکدخوان را اجرا کرد:

new IntentIntegrator(this).initiateScan();

حالا که با دستور فوق، دوربین اجرا شده و می‌توان آن را روی یک بارکد قرار داد، نتیجه‌ی آن را بایستی در رویداد onActivityResult مدیریت کنیم:

// Get the results:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if(result != null) {
        if(result.getContents() == null) {
            Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

استفاده در یک فرگمنت

اگر در یک فرگمنت قرار دارید، می‌توانید با دستور زیر، بارکدخوان را اجرا کنید:

IntentIntegrator.forFragment(this).initiateScan()

نتیجه را نیز می‌توانیم به صورت قبل و از طریق رویداد onActivityResult فرگمنت به دست آوریم.

اگر از Support Library استفاده می‌کنید، به جای متند forFragment، از متد forSupportFragment استفاده کنید.

متدهای دیگر IntentIntegrator

می‌توانیم تنظیمات دلخواهی را به بارکدخوان اعمال کنیم:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();

برای مثال در اینجا با استفاده از متد setCameraId، می‌توانیم مشخص کنیم که با دوربین جلو یا عقب و … نمایش داده شود.

تغییر Orientation اکتیویتی بارکدخوان

ابتدا اکتیویتی زیر را به AndroidManifest.xml خود اضافه کنید:

<activity
		android:name="com.journeyapps.barcodescanner.CaptureActivity"
		android:screenOrientation="fullSensor"
		tools:replace="screenOrientation" />

حالا در هنگام اجرای بارکدخوان، از متد setOrientationLocked استفاده کنید:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setOrientationLocked(false);
integrator.initiateScan();

موارد اصلی این کتابخانه ذکر شدند و ممکن است در آینده به موارد پیشرفته‌تر این کتابخانه نیز اشاره کنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک