Đọc QRCode/Barcode với thư viện barcodescanner
Nếu muốn implement tính năng đọc QR code một cách nhanh gọn dễ dàng thì barcodescanner là 1 lựa chọn đáng giá nhất. https://github.com/dm77/barcodescanner Tích hợp đơn giản, custom dễ dàng, chạy ổn định. Hôm nay mình sẽ giới thiệu cách sử dụng thư viện barcodescanner trong ứng dụng android để đọc ...
Nếu muốn implement tính năng đọc QR code một cách nhanh gọn dễ dàng thì barcodescanner là 1 lựa chọn đáng giá nhất. https://github.com/dm77/barcodescanner Tích hợp đơn giản, custom dễ dàng, chạy ổn định. Hôm nay mình sẽ giới thiệu cách sử dụng thư viện barcodescanner trong ứng dụng android để đọc QR Code/ barcode
Bản chất thì thư viện barcode scanner sử dụng core là thư viện zxing - một thư viện đọc/encode mã QR/barcode cực kỳ khủng vậy nên bạn hoàn toàn yên tâm về khả năng đọc và độ chính xác. bên cạnh đó bạn có thể lựa chọn phiên bản sử dụng core là ZBar 1 thư viện khủng không kém zxing.
Bước 1: Thêm dependencies
compile 'me.dm7.barcodescanner:zxing:1.9.8'
Bước 2: Cấp quyền truy cập camera
Tất nhiên, ứng dụng đọc QR Code thì cần có camera để soi nên bạn thêm dòng này vào manifest
<uses-permission android:name="android.permission.CAMERA" />
Với target version >=23 bạn cần phải implement việc request permission runtime để truy cập camera.
Bước 3: Sử dụng ZXingScannerView
Tạo Activity và sử dụng custom view ZXingScannerView. bạn sử dụng view như là các view bình thường khác. có các custom attributes để config hiển thị của màn hình camera.
<me.dm7.barcodescanner.zxing.ZXingScannerView
android:id="@+id/scannerView"
android:layout_awidth="match_parent"
android:layout_height="match_parent"
app:borderColor="#FFF"
app:borderLength="24dp"
app:borderWidth="4dp"
app:laserColor="#00ff77"
app:maskColor="@android:color/transparent"
app:roundedCorner="false"
app:squaredFinder="true"/>
Bước 4: Viết code java
public class SimpleScannerActivity extends Activity implements ZXingScannerView.ResultHandler { private ZXingScannerView mScannerView; @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.scanner_activity); mScannerView = findViewById(R.id.scannerView); // Programmatically initialize the scanner view } @Override public void onResume() { super.onResume(); mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. mScannerView.startCamera(); // Start camera on resume } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); // Stop camera on pause } @Override public void handleResult(Result rawResult) { // Do something with the result here Log.v(TAG, rawResult.getText()); // Prints scan results Log.v(TAG, rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.) // If you would like to resume scanning, call this method below: mScannerView.resumeCameraPreview(this); } }
Khi có kết quả thì sẽ gọi call back vào method handleResult()
Nâng cao
Ngoài ra bạn có thể tùy chỉnh nâng cao như bật flash, autofocus, chỉ định camera ...
// Toggle flash: void setFlash(boolean); // Toogle autofocus: void setAutoFocus(boolean); // Specify interested barcode formats: void setFormats(List<BarcodeFormat> formats); // Specify the cameraId to start with: void startCamera(int cameraId);
Support formats
BarcodeFormat.UPC_A BarcodeFormat.UPC_E BarcodeFormat.EAN_13 BarcodeFormat.EAN_8 BarcodeFormat.RSS_14 BarcodeFormat.CODE_39 BarcodeFormat.CODE_93 BarcodeFormat.CODE_128 BarcodeFormat.ITF BarcodeFormat.CODABAR BarcodeFormat.QR_CODE BarcodeFormat.DATA_MATRIX BarcodeFormat.PDF_417
Xin cảm ơn!