QR-Bar code trong android

1. Giới thiệu:

Trong bài này, mình sẽ giới thiệu cho các bạn 1 kỹ thuật đơn giản để tạo QR code và Bar code trong android với thư viện Zxing

  • QR Code, viết tắt của Quick response code (tạm dịch "Mã phản hồi nhanh") hay còn gọi là mã vạch ma trận (matrix-barcode) là dạng mã vạch hai chiều (2D) có thể được đọc bởi một máy đọc mã vạch hay smartphone (điện thoại thông minh) có chức năng chụp ảnh (camera) với ứng dụng chuyên biệt để quét mã vạch
  • Barcode theo định nghĩa là phương pháp lưu trữ và truyền tải thông tin bằng một lọai ký hiệu gọi là ký mã vạch (Barcode symbology). Ký mã vạch hay gọi tắt cũng là mã vạch, là 1 ký hiệu tổ hợp các khoảng trắng và vạch thẳng để biểu diễn các mẫu tự, ký hiệu và các con số. Sự thay đổi trong độ rộng của vạch và khoảng trắng biểu diễn thông tin số hay chữ số dưới dạng mà máy có thể đọc được.
  • Zxing (viết tắt của “zebra crossing”) là một thư viện mã nguồn mở, xử lý nhiều định dạng mã vạch 1 chiều và 2 chiều, được cài đặt bằng Java. Mục đích của thư viện này là sử dụng máy ảnh trên điện thoại di động để chụp và giải mã các mã vạch trên thiết bị, không cần phải kết nối với máy chủ. hiện tại thư viện hỗ trợ các định dạng mã vạch sau:
UPC-A và UPC-E
EAN-8 và EAN-13
Code 39
Code 128
QR Code
Data Matrix
ITF

2.Demo

Code sử dụng mô hình MVVMP Đầu tiên, tạo layout demo

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <Button
            android:id="@+id/button"
            android:layout_width="150dp"
            android:layout_height="50dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="19dp"
            android:onClick="@{()->viewModel.onQRCodeClick()}"
            android:text="QR CODE"
            />
        <Button
            android:layout_width="150dp"
            android:layout_height="50dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentTop="true"
            android:layout_marginEnd="19dp"
            android:onClick="@{()->viewModel.onBarCodeClick()}"
            android:text="BAR CODE"
            />
        <ImageView
            android:layout_width="@dimen/dp_150"
            android:layout_height="@dimen/dp_150"
            android:layout_below="@+id/button"
            android:layout_centerHorizontal="true"
            android:layout_weight="2"
            android:src="@drawable/ic_no_image"
            bind:ignore="ContentDescription"
            bind:imageBitmap="@{viewModel.code}"
            />
    </RelativeLayout>

Tiếp theo thêm thư viện vào build.gradle app

compile 'com.google.zxing:core:3.2.1'
compile 'com.journeyapps:zxing-android-embedded:[email protected]'

Trong class BindingUtils thêm hàm

@BindingAdapter("imageBitmap")
    public static void setImageBitmap(ImageView view, Bitmap bitmap) {
        view.setImageBitmap(bitmap);
    }

Tại class viewmodel, bổ sung hàm generateCode

public void generateCode(BarcodeFormat format, int width, int height) {
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            BitMatrix bitMatrix = multiFormatWriter.encode("code123", format, width, height);
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            setCode(barcodeEncoder.createBitmap(bitMatrix));
        } catch (WriterException e) {
            e.printStackTrace();
        }
    }

Thêm 2 hàm sự kiện click của 2 button vừa tạo

public void onQRCodeClick() {
  generateBarCode(BarcodeFormat.QR_CODE, 300, 300);
 }
 
  public void onBarCodeClick() {
  generateBarCode(BarcodeFormat.CODE_128, 200, 100);
 }

OK, vậy là với 2 buttob QR code và Bar code, bạn đã có thể generate QR hay Bar code từ "code123", chúc bạn thành công