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

相关文章
相关标签/搜索