Android中二維碼掃描的最常用庫是zxing和zbar,上一篇《Android快速實現二維碼掃描–Zxing》介紹了Zxing。這次說Zbar,Zbar速度極快,我就比較常用,項目地址:https://github.com/ZBar/ZBar
同樣你會發現官方庫的東西太多,我們不是全部需要,照着官方demo改太耗時,所以分享一下我常用的集成方式。
先上效果圖
源碼已上傳至Github:https://github.com/yangxch/ScanZbar
集成
1.引入jar包和so文件
如果jar文件和so文件放在libs下,需在app build.gradle的android標簽中加入如下代碼並Sync Now
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
2.將zbar包copy到項目
這里包名不一樣肯定會報錯,clean project並改掉包名就好。
3.導入相關資源文件
drawable、drawable-hdpi、drawable-xhdpi和layout
raw文件和values文件
注: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