آموزش ساخت بارکد خوان در اندروید با کتابخانه 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 |
راه اندازی 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 فرگمنت به دست آوریم.
متدهای دیگر 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();
نظرات ثبت شده بدون دیدگاه