Android快速實現二維碼掃描--Zbar

   Android中二維碼掃描的最經常使用庫是zxing和zbar,上一篇《Android快速實現二維碼掃描–Zxing》介紹了Zxing。此次說Zbar,Zbar速度極快,我就比較經常使用,項目地址:https://github.com/ZBar/ZBar 
   一樣你會發現官方庫的東西太多,咱們不是所有須要,照着官方demo改太耗時,因此分享一下我經常使用的集成方式。 

 先上效果圖 html

    

源碼已上傳至Github:https://github.com/yangxch/ScanZbar 

android

集成git

1.引入jar包和so文件github

 

  若是jar文件和so文件放在libs下,需在app build.gradle的android標籤中加入以下代碼並Sync Nowapp

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

 

2.將zbar包copy到項目ide

  這裏包名不同確定會報錯,clean project並改掉包名就好。 gradle

 

3.導入相關資源文件ui

  drawable、drawable-hdpi、drawable-xhdpi和layout this

 

 

raw文件和values文件 spa

注:values中相關資源不要直接替換,不然會覆蓋以前的,須要打開文件將內容加到本身項目對應文件中。 

4.AndroidManifest.xml加入相關權限和掃描的Activity

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<activity android:name=".zbar.CaptureActivity" />

5.調用掃描界面 獲取掃描結果

在須要打開掃描界面的地方直接跳轉至CaptureActivity(使用startActivityForResult)

/** * 跳轉到掃碼界面掃碼 */
private void goScan(){ Intent intent = new Intent(MainActivity.this, CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE_SCAN); }

在onActivityResult的回調中便可獲取掃描內容,以下

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_CODE_SCAN: // 掃描二維碼回傳
            if (resultCode == RESULT_OK) { if (data != null) { //獲取掃描結果
                    Bundle bundle = data.getExtras(); String result = bundle.getString(CaptureActivity.EXTRA_STRING); } } break; default: break; } }

 

動態權限申請

因爲掃描須要調用相機,一樣須要進行權限的動態申請,源碼中我已加入,具體作法和上一篇同樣。 

分析

zbar包下主要類做用以下

CaptureActivity:爲掃碼界面的Activity;
AutoFocusManager:相機自動聚焦管理類 ;
CameraConfigurationManager:相機配置參數信息的操做類 ;
CameraManager:爲自定義相機操做的封裝,管理相機的打開,取景,參數,回收處理;
PreviewCallback:圖像數據回調處理;
DecodeThread:解碼子線程;
BeepManager:掃碼操做聲音處理;

 

 


 更多技術乾貨,歡迎關注個人公衆號:ChaoYoung

相關文章
相關標籤/搜索