android 集结号

android 扫描二维码

2016-06-07  本文已影响1170人  JeremyDai

关于二维码的了解

我们现在常用的二维码为QR码作为编码的码制,他是在一个矩形空间内通过黑、白像素在矩阵中的不同分布来进行编码的。我们知道电脑是使用二进制数字来储存和处理数据的,而在二维码中,用黑白矩阵来表示二进制数据,而我们肉眼看到的黑色表示的是二进制“1”,白色表示的是二进制“0”,黑白的排列组合确定了矩阵式二维码的内容,以便计算机对二维码符合进行编码和分析。通过黑白表示1和0这就是为什么二维码都是黑白图形的原因。
二维码扫描定位流程:首先手机拍照,拍到的照片是彩色的,对于扫描的二维码也是一样,他默认也是彩色的,只不过颜色有深浅之分,所以识别软件正式依靠颜色的深浅来完成对二维码识别的第一步

说到二维码扫描 那就肯定是少不了 ZXing 库的使用了,zxing是由google开发的开源二维码扫描库,支持条形码和二维码的扫描,git 地址为:zxing github地址

android库组成:

zxing还 提供了ios 和 java等客户端的支持。

cpp
C++ port

iphone
iPhone client

objc
Objective C port

actionscript
Partial ActionScript port

jruby
JRuby wrapper

基于ZXing的第三方库

这个使用启动来要简单一点,
库的地址为:https://github.com/journeyapps/zxing-android-embedded

如何使用这个库

只需要在build.gradle 文件中添加如下内容:

repositories{
 jcenter()
}
dependencies{ 
compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar' 
compile 'com.google.zxing:core:3.2.0'
}

然后更新gradle,就会自动导入库了
导入完后使用:

//Activity中使用
new IntentIntegrator(this).initiateScan();

/*fragment中使用*/
IntentIntegrator.forFragment(this).initateScan();
//如果使用的是兼容包中的fragment则使用下面的方法
IntentIntegrator.forSupportFragment.initateScan();

如需要更多的设置可以在:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);
 // Use a specific camera of the deviceintegrator.setBeepEnabel(false);
integrator.setBarcodeImageEnable(true);integrator.initiateScan();

获取扫描到的结果

// Get the results:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
   if(result != null) { 
       if(result.getContents() == null) {                          
           Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); 
         } else { 
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
           } 
       } else { 
              super.onActivityResult(requestCode, resultCode, data);
      }
}
设置方向:

方向这个问题可以通过 建立一个CaptureActivityAnyOrientation,这个activity集成字CaptureActivity,然后你在manifest中设置这activity的方向,

<activity android:name=".CaptureActivityAnyOrientation"  
android:screenOrientation="fullSensor"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden"></activity>

通过设置这个capture activity来限制取景界面的方向。

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setCaptureActivity(CaptrueActivityAnyOrientation.class);
integrator.setOrientationLocked(false);
integrator.initiateScan();
参考

参考文章

上一篇下一篇

猜你喜欢

热点阅读