+3

Quét QrCode và Barcode với thư viện Zxing

BarCode và Qrcode khá phổ biến và được sử dụng nhiều trong các mã xác định của sản phầm, đồ gia dụng hoặc cũng có thể là địa chỉ email, tin nhắn SMS, nội dung ký tự văn bản hay thậm chí là thông tin định vị vị trí địa lý.Vậy nó là cái gì mà lại có thể chứa được nhiều thông tin trong một hình ảnh hay mã vạch như vậy ?.

1. QRCode và BarCode là gì?

  • 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.
  • QR Code được phát triển bởi công ty Denso Wave (Nhật Bản) vào năm 1994, 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 điện thoại có chức năng chụp ảnh với ứng dụng chuyên biệt để quét mã vạch.

2. thư viện Zxing là gì ?

Zxing (viết tắt của “zebra crossing”) là một thư viện mã nguồi 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 và một số ngôn ngữ khác.

  • Các định dạng hỗ trợ

Screenshot from 2016-10-25 09:28:01.png

  • thành phần và hoạt động

Screenshot from 2016-10-25 09:28:19.png

3. xây dựng ứng dụng quét BarCode và Qrcode trên android

bằng cách tùy chỉnh ZXing android + android-integration (các bạn tải 2 phần trên tại [link đây ] mà ta có thể xây dựng được một app không cần phải cài thêm bất kỳ phần mềm nào để hỗ trợ quét.

  • tạo Project trên android studio ở đây mình tạo ứng dụng nhằm mục đích so sánh giữa 2 barcode hoặc 2 Qrcode nên mình tạo ứng dụng tên là : CompareBarcode

nameproject.png

  • tạo một package trong dự án của bạn có tên như sau: com.google.zxing.client.android , lần lượt tạo ra các package con bên trong package đó android,integration,result:

copy1.png

  • bây giờ bạn copy 2 zxing android + android-integration và copy vào package vừa tạo ( copy những file mà mình đã liệt kê như hình ảnh bên dưới)

copy.png

  • Copy file sau vào lần lượt các source trong project của bạn:trong capture.xml bạn có thể tùy chỉnh giao diện quét cho ứng dụng của bạn

            res/layout/capture.xml
            res/layout/ids.xml
    
  • Tiếp tục khai báo CaptureActivity trong androidManifest

    <uses-feature android:name="android.hardware.camera" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <activity
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden">
            <intent-filter>
                <action android:name="com.google.zxing.client.android.SCAN" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
  • Thêm thư viện vào trong build.gradle của app
    compile 'com.journeyapps:zxing-android-embedded:3.3.0'
    compile 'com.journeyapps:zxing-android-legacy:2.0.1@aar'
    compile 'com.journeyapps:zxing-android-integration:2.0.1@aar'
    compile 'com.google.zxing:core:3.0.1'
  • Cách gọi một scanner (android-integration)
IntentIntegrator.initiateScan(MainActivity.this,requestcode);

ở trên do mình có chỉnh sửa nhằm tạo requestcode truyền về nên mình có truyền thêm requestcode vào để phân biệt khi nhấn vào 2 button khác nhau, nếu bạn không sửa gì thì bạn chỉ cần bỏ requestcode đi.

Đã xong bây giờ bạn có thể tạo giao diện cho app của mình và khi nào cần quét bạn chỉ cần gọi nó ra ( đừng quên request permission cho camera khi sử dụng trên android 6.0 trở lên nhé )

references

- https://github.com/zxing/zxing
- https://vi.wikipedia.org/wiki/M%C3%A3_QR

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí