1. 程式人生 > >修改基於zxing庫的cordova掃描二維碼外掛BarcodeScan掃碼介面的UI

修改基於zxing庫的cordova掃描二維碼外掛BarcodeScan掃碼介面的UI

最近在做一些混合式的APP開發,主要用到了ionic+cordova兩個框架。關於混合式APP和ionic和cordova就是用開發web的一套東西開發APP應用,就不多說這些了,這不是這篇文章的重點,感興趣的同學可以自己瞭解一下。現在在團隊中主要負責一些cordova呼叫底層硬體裝置的外掛的用法比如:呼叫通訊錄、呼叫撥號功能、定位、呼叫攝像頭掃描二維碼。

好了重點來了!這篇文章就是呼叫cordova 的BarcodeScanner外掛掃描和生成二維碼,cordova 的BarcodeScanner外掛已經提供了掃描二維碼的功能,但是那個掃描的介面簡直不能太醜,所以就想改一下掃描二維碼的介面。檢視cordova的掃碼外掛可以看到外掛本身也是呼叫開源的zxing庫,網上關於在android的原生開發中修改zxing原始碼達到修改掃碼介面的文章一堆,但是修改cordova外掛呼叫的zxing庫就沒那麼簡單了。
所以我就想了一種方案:
1、從zxing庫裡的關於掃碼介面的程式碼改起
2、改完之後重新打包成jar包替換 進入platforms\android\libs資料夾下把com.google.zxing.client.android.captureactivity.jar替換掉,執行出錯。方案失敗

仔細研究了cordova掃碼外掛的程式碼後發現
BarcodeScanner\src\android目錄下有這個資料夾
進入去看著就是添加了android平臺之後的zxing庫啊

好了,方案出來了,就修改這個了,修改完之後打成jar包替換掉cordova專案中的進入platforms\android\libs資料夾下把com.google.zxing.client.android.captureactivity.jar替換掉就OK啦。
具體的修改有時間我在寫上來,我把修改好的jar包放上來,有需要的可以下載之後直接替換就能使用了[修改之後的zxing jar包下載](http://download.csdn.net/detail/ecnu_df/9401517)

說了這麼多不知道都說清楚了麼跟著我寫個demo吧。動動手都就明白了。
具體的步驟如下:
開啟 cmd
1、建立cordova專案

cordova create hellobarcode com.example.cordova mybarcode

2、進入 專案資料夾hellobarcode

cd hellobarcode

3、增加android平臺

cordova platform add android

4、加入掃碼外掛

cordova plugin add https://github.com/wildabeast/BarcodeScanner.git

5、把專案匯入eclipse中,把MainActivity中libs目錄下的com.google.zxing.client.android.captureactivity.jar檔案替換為
我修改好的zxing_4.1.8.jar檔案,然後重新整理一下專案。
6、修改asset 資料夾下的index.html檔案增加兩個Button button中的onclick事件指向下面兩段js程式碼

1. //掃碼的js介面程式碼    
2.  cordova.plugins.barcodeScanner.scan(  
2.        function (result) {  
3.         //實現功能邏輯
4.            alert("We got a barcode\n" +  
5.                  "Result: " + result.text + "\n" +  //解析之後的二維碼原始碼,url等
6.                  "Format: " + result.format + "\n" +  //編碼的格式
7.                  "Cancelled: " + result.cancelled);  
8.        },   
9.        function (error) {  
10.           alert("Scanning failed: " + error);  
11.       });  
1. //生成二維碼的js介面程式碼
2.      cordova.plugins.barcodeScanner.encode(  
2.        "TEXT_TYPE",   //編碼的型別 文字型、email、sms、手機號
3.        "http://www.baidu.com",   //url
4.        function(success) {
5.         //實現功能邏輯  
6.          alert("encode success: " + success);  //生成之後會預設作為圖片顯示出來
7.        }, function(fail) {  
8.          alert("encoding failed: " + fail);  
9.        }); 

7、修改相關的配置檔案
用以下程式碼替換platforms\android\res\menu\encode.xml 中的程式碼

1、 <menu xmlns:android="http://schemas.android.com/apk/res/android">  
2、   <item android:id="@+id/menu_share"  
3android:title="@string/menu_share"  
4android:icon="@android:drawable/ic_menu_share"  
5android:orderInCategory="1"  
6android:showAsAction="withText|ifRoom"/>  
7、      <item android:id="@+id/menu_encode"  
8android:title="@string/menu_encode_vcard"  
9android:icon="@android:drawable/ic_menu_sort_alphabetically"  
10android:orderInCategory="2"  
11android:showAsAction="withText|ifRoom"/>  
12、    </menu> 

8、修改相應的硬體的訪問許可權,執行效果如下:
注意:需要在真機上執行
掃碼掃碼結果生成二維碼