天天看點

一掃天下——ZXing使用全解析一掃天下——ZXing使用全解析

二維碼現在已經爛App了,不管什麼App,沒有二維碼就好像低人一等了。是以,在自己的項目中內建二維碼功能還是非常有必要的。

網上很多都是基于ZXing2.3的,但是現在都3.1了,改了很多bug,也進行了很多優化,最好按本文弄一下。

ZXing的github位址:

<a href="https://github.com/zxing/zxing">https://github.com/zxing/zxing</a>

通過git clone [email protected]:zxing/zxing.git 指令我們可以把整個ZXing項目拉取下來。

一掃天下——ZXing使用全解析一掃天下——ZXing使用全解析

然而這并沒有什麼卵用。

因為ZXing的項目是非常龐大的,功能也非常多,但是我們不需要這麼多,我們隻關心Android部分的。

在使用ZXing之前,我們需要先編譯它的jar包,我們可以看見源代碼目錄中有一個core的目錄,我們可以把這個檔案夾導入eclipse作為一個java工程。最後通過export導出一個jar包。

我們需要把核心的掃碼、解碼功能抽取出來,這一步,網上已經有很多人做過了,隻是大部分都是基于第一個抽ZXing的人,而那個是基于ZXing1.5、2.3的,是以,記得要進行Update哦。

那麼我們如何獲得最新的ZXing代碼呢,很簡單,找一個舊的,然後把最新的代碼一個個copy過去替換就好了,當然,還是會有一些問題,不過一步步解決就可以了,都不是很大的問題。

這裡為大家也提供一個封裝好的最新的ZXing Lib:

<a href="https://github.com/xuyisheng/ZXingLib">https://github.com/xuyisheng/ZXingLib</a>

基于ZXing3.1封裝,包含了最新的jar包和代碼。

ZXing暴露的調用Activity。在handleDecode方法中對掃碼成功後的動作作處理。

ZXing掃碼視窗的繪制,原始的ZXing使用這種方式去繪制,在上面提供的開源庫中,作者将掃描框的繪制直接抽取到了XML檔案中,這樣修改起來更加友善了。

修改橫豎屏、處理變形效果的核心類。

在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(讀取配置設定相機的對焦模式、閃光燈模式等等),可以将掃描改為豎屏:

即:

在方法最後加上:

即可。

在public void initFromCameraParameters(Camera camera)方法中(計算了螢幕分辨率和目前最适合的相機像素),我們可以對修改為豎屏掃碼後,由于像素資訊點沒有對調造成圖像扭曲變形進行修改。

在Log.d(TAG, “Screen resolution: ” + screenResolution);後加上如下的代碼:

最後,将screenResolution替換為screenResolutionForCamera:

ZXing解碼的核心類

當DecodeHandler.decode完成解碼後,系統會向CaptureActivityHandler發消息。如果編碼成功則調用CaptureActivity.handleDecode方法對掃描到的結果進行分類處理。

本文的Github中已經包含了前面所提到的所有修改(橫豎屏、扭曲變形),用最新的ZXing代碼進行了update,同時提供了編碼、解碼方法,并且将掃碼界面抽取成XML(感謝開源作者),友善拓展。

重要的東西發三遍。

以上。

繼續閱讀