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 Now
app
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