Zxing直接將byte數組生成QRcode

需求:將手機獲取到的特殊信息寫入到二維碼,客戶掃二維碼直接獲取二維碼原始信息解析獲取數據;

問題 1: 由於信息比較大最少有一千多byte。經試驗一張二維碼數據量一千一下有較高的識別率,因此要對數據進行壓縮。

        2:zxing原生只能寫入string型的數據。

爲了儘可能多的寫入數據,採用gzip對數據進行壓縮,並對壓縮後的數據進行crc8校驗。

過程:github下載源碼 ,下載完後目錄如下:

    android、android-core、core是我們安卓要用到的,本次主要用到的是core。

   查看源碼後發現我們寫入的string最終還是通過8位的二進制寫入,因此只要對相關源代碼進行修改就可以達到我們直接寫入byte[],來減少數據量。

將QRCodeWriter下的encoder等相關方法全部全部改爲傳入byte[]數組,最好不要在原方法上直接修改,方便保留原功能。

Encoder的encoder方法內的mode直接改爲Mode.BYTE,接下來需要重新編譯項目生成 core-3.x.x.jar。

因爲原項目是用maven來進行構建的,所以需要本地有maven環境,若沒有自己重新下載安裝具體百度。

安裝完成,添加maven到環境變量 進入到core所在的文件夾 ,輸入mvn -DskipTests -Dgpg.skip=true install

第一次編譯需要等待下載很多依賴文件,所以慢一些。最終會在core下生成一個tagert文件夾

圈起來的就是我們修改後的core.jar。

導入我們的項目libs下即可。最終獲取的不要直接取rawResult解析後text,需要直接獲取rawBytes byte數組即原始的qr內容。

intent.putExtra(Constant.CODED_CONTENT, rawResult.getRawBytes());