Cách sử dụng

Một phần của tài liệu ỨNG DỤNG LƯU TRỮ THÔNG TIN BẰNG CHUỖI MÃ VẠCH (Trang 38 - 42)

3.3.2.1 Giải mã

Việc sử dụng thư viện Zxing khá dễ dàng [13]. Đầu tiên, phải khởi tạo một đối tượng thuộc lớp com.google.zxing.Reader. Chúng ta có thể sử dụng đối tượng thuộc lớp MultiFormatReader để đọc tất cả các định dạng mã vạch mà thư viện hỗ trợ.

Reader reader = new MultiFormatReader();

Nếu muốn đọc mã QR, ta có thể cài đặt để đọc theo mã QR. Ta có thể khởi tạo như sau:

Reader reader = new QRCodeReader();

Tiếp đến ta cần xác định ảnh để giải mã. Reader sẽ đọc từ một đối tượng được cài đặt từ lớp com.google.zxing.MonchromeBitmapSource, đây là một lớp trừu tượng cho các lớp mô tả hình ảnh.

Trong Java SE thư viện có sẵn lớp java.awt.BufferedImage, ta cài đặt như sau: BufferedImage myImage = ...;

MonochromeBitmapSource source = new

Trong thư viện Android không có lớp java.awt.BufferedImage, ta cài đặt như sau: Bitmap bmp = BitmapFactory.decodeResource( getResources(), R.drawable.barcode);

MonochromeBitmapSource source =

newRGBMonochromeBitmapSource(bmp);

Nếu ảnh là một resource (tài nguyên), R.drawable.barcode là đối tượng xác định tài nguyên đó.

Hoặc ta có thể dùng như sau:

Bitmap bmp = BitmapFactory.decodeFile("file_path"); MonochromeBitmapSource source = new

RGBMonochromeBitmapSource(bmp);

Nếu ảnh là một tập tin ngoài, file_path là đường dẫn tới tập tin đó. Giải mã

Result result = reader.decode(source); Trong đó:

result: là đối tượng thuộc lớp com.google.zxing.Result. Lớp Result này cung cấp các phương thức để lấy giá trị byte hoặc chuỗi được mã hóa trong mã vạch nếu có. Ví dụ:

String text = result.getText();

byte[] rawBytes = result.getRawBytes();

BarcodeFormat format = result.getBarcodeFormat(); ResultPoint[] points = result.getResultPoints();

Trong đó:

result: là đối tượng thuộc lớp com.google.zxing.MonochromeBitmapSource. Cuối cùng, bộ giải mã hỗ trợ một hệ thống “gợi ý” giúp chúng ta giải mã hiệu quả hơn, hoặc giảm độ chính xác để tăng tốc độ. Ví dụ, gợi ý “TRY_HARDER” sẽ yêu cầu bộ giải mã tăng nhiều thời gian hơn cho việc nhận dạng mã vạch:

Hashtable<DecodeHintType, Object>

hints = new Hashtable<DecodeHintType, Object>(); hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); Result result = reader.decode(source, hints);

3.3.2.2 Mã hóa một chuỗi ra ảnh mã QR

Tự gọi: để mã hóa một chuỗi ra ảnh mã QR, ta chỉ việc tạo một Intent xác định hành động mã hóa, xác định loại và dữ liệu mã hóa sau đó gọi phương thức startActivity(). Ví dụ:

Intent intent = new

Intent("com.google.zxing.client.android.ENCODE"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra("ENCODE_TYPE", "TEXT_TYPE"); intent.putExtra("ENCODE_DATA","HELLO WORLD"); startActivity(intent);

Sử dụng lớp IntentIntegrator

Lớp IntentIntegrator cung cấp một phương thức đơn đơn giản là IntentIntegrator.shareText() để mã hóa một chuỗi ra mã QR. (adsbygoogle = window.adsbygoogle || []).push({});

IntentIntegrator.shareText(activity, text);

3.3.2.3 Quét mã vạch từ một chương trình khác thông qua Intent

Tự gọi: nếu Barcode Scanner (bộ quét mã vạch) đã được cài đặt trên điện thoại Android, ta có thể cho nó quét và trả lại kết quả, chỉ việc thông qua một Intent. Ví dụ:

public Button.OnClickListener mScan = new

Button.OnClickListener() {

public void onClick(View v) { Intent intent = new

Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0);

} };

Đoạn mã trên bắt sự kiện của một nút và gọi tới Intent của Barcode Scanner để quét mã QR.

public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == 0) { if (resultCode == RESULT_OK) { String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); // Handle successful scan

} else if(resultCode==RESULT_CANCELED) { // Handle cancel } } } }

Đoạn mã trên bắt sự kiện trả về kết quả khi Barcode Scanner quét xong. Nếu quét thành công mã resultCode sẽ là RESULT_OK, nếu Intent bị hủy thì mã resultCode sẽ là RESULT_CANCELED.

Sử dụng lớp IntentIntegrator

Lớp IntentIntegrator gọi Barcode Scanner rất đơn giản thông qua hàm sau: IntentIntegrator.initiateScan(Activity);

Để lấy giá trị trả về, lớp IntentIntegrator có hàm parseActivityResult

protected void onActivityResult (int requestCode,

int resultCode, Intent data) { switch(requestCode) { case IntentIntegrator.REQUEST_CODE: if (resultCode == RESULT_OK) { IntentResult scanResult = IntentIntegrator.parseActivityResult( requestCode,resultCode, data); if (scanResult != null) { String strContent=scanResult.getContents(); //do here } } }

Chương 4: Xây dựng ứng dụng lưu trữ thông tin bằng chuỗi mã vạch

Nội dung của chương này sẽ đi xây dựng ứng dụng lưu trữ thông tin bằng chuỗi mã vạch, một ứng dụng dựa trên nền tảng Android, sử dụng thư viện Zxing cùng mã vạch QR.

Một phần của tài liệu ỨNG DỤNG LƯU TRỮ THÔNG TIN BẰNG CHUỖI MÃ VẠCH (Trang 38 - 42)