赞
踩
Android中用于二维码相关的库比较少,并且大多数已经不再维护(具体可见https://android-arsenal.com/tag/81)。其中最常用的是zxing和zbar,zxing项目是谷歌推出的用来识别多种格式条形码的开源项目,项目地址为https://github.com/zxing/zxing,zxing有多个人在维护,覆盖主流编程语言,也是目前还在维护的较受欢迎的二维码扫描开源项目之一。zbar则是主要用C来写的,速度极快,推出了iPhone的SDK和Android的相关调用方法(JNI),但这个项目已经有几年不维护了,目前并没有维护下去的意思,见https://github.com/ZBar/ZBar。
优化其实我觉得有两方面
(1)优化二维码生成算法,因为现在有专门做二维码的公司,说明二维码是可以做的更好识别的(微信扫二维码之所快,他们扫描的算法是一方面,但是二维码生成也是优化的)
(2)优化二维码的扫描算法
zxing 的Demo修改后实现的扫描最大的问题就是角度,用zxing做的扫描需要与二维码差不多完全平行才能扫出来(图片识别出了问题),优化下zxing
项目工程代码优化
去掉不必要的类,比如我们的目的是扫描二维码,但其实原github上Zxing的Demo是可以扫描条形码,扫描获取到图片之后它会进行判断,类似的多余类去掉可以稍微提升一下速度(主要是使工程不那么臃肿)
还有其他优化等等。。。。,但是做完之后发现并没有什么改变,我只能说如果你扫描的角度对了,是和二维码平行的话,二维码绝对识别的出来,而且特别快,如果你不是平行,你贴着屏幕扫二维码都还是扫不出来,最烦的是网上基本没有解决的办法,那些说优化过的Demo角度问题还是没有解决,所以我就去找了AndroidZbar的Demo
网上基本都是说Android用Zxing,ios用Zbar,所以我开始没想在Android用Zbar,网上AndroidZbar Demo特别少,然后我就去了OSChina找,发现了github上的一个基于Zbar的开源库BGAQRCode
其实就是跳转界面
- public class TestScanActivity extends AppCompatActivity implements QRCodeView.Delegate {
- private static final String TAG = TestScanActivity.class.getSimpleName();
-
- private QRCodeView mQRCodeView;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_test_scan);
- setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
-
- mQRCodeView = (ZBarView) findViewById(R.id.zbarview);
- mQRCodeView.setDelegate(this);
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- mQRCodeView.startCamera();
- }
-
- @Override
- protected void onStop() {
- mQRCodeView.stopCamera();
- super.onStop();
- }
-
- @Override
- protected void onDestroy() {
- mQRCodeView.onDestroy();
- super.onDestroy();
- }
- private void vibrate() {
- Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
- vibrator.vibrate(200);
- }
- //下面这个方法就是返回扫描结果的
- @Override
- public void onScanQRCodeSuccess(String result) {
- Log.i(TAG, "result:" + result);
- Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
- vibrate();
- mQRCodeView.startSpot();
- }
-
- @Override
- public void onScanQRCodeOpenCameraError() {
- Log.e(TAG, "打开相机出错");
- }
-
- public void onClick(View v) {
- switch (v.getId()) {
- //开启扫描
- case R.id.start_spot:
- mQRCodeView.startSpot();
- break;
- //关闭扫描
- case R.id.stop_spot:
- mQRCodeView.stopSpot();
- break;
- case R.id.start_spot_showrect:
- mQRCodeView.startSpotAndShowRect();
- break;
- case R.id.stop_spot_hiddenrect:
- mQRCodeView.stopSpotAndHiddenRect();
- break;
- case R.id.show_rect:
- mQRCodeView.showScanRect();
- break;
- case R.id.hidden_rect:
- mQRCodeView.hiddenScanRect();
- break;
- case R.id.start_preview:
- mQRCodeView.startCamera();
- break;
- case R.id.stop_preview:
- mQRCodeView.stopCamera();
- break;
- case R.id.open_flashlight:
- mQRCodeView.openFlashlight();
- break;
- case R.id.close_flashlight:
- mQRCodeView.closeFlashlight();
- break;
- case R.id.scan_barcode:
- mQRCodeView.changeToScanBarcodeStyle();
- break;
- case R.id.scan_qrcode:
- mQRCodeView.changeToScanQRCodeStyle();
- break;
- }
- } ```
- ###R.layout.activity_test_scan

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MatchMatch">
- <cn.bingoogolapple.qrcode.zbar.ZBarView
- android:id="@+id/zbarview"
- style="@style/MatchMatch"
- app:qrcv_animTime="1000"
- app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描"
- app:qrcv_barcodeRectHeight="140dp"
- app:qrcv_borderColor="@android:color/white"
- app:qrcv_borderSize="1dp"
- app:qrcv_cornerColor="@color/colorPrimaryDark"
- app:qrcv_cornerLength="20dp"
- app:qrcv_cornerSize="3dp"
- app:qrcv_customGridScanLineDrawable="@mipmap/custom_grid_scan_line"
- app:qrcv_isBarcode="false"
- app:qrcv_isOnlyDecodeScanBoxArea="false"
- app:qrcv_isShowDefaultGridScanLineDrawable="true"
- app:qrcv_isShowDefaultScanLineDrawable="true"
- app:qrcv_isShowTipBackground="true"
- app:qrcv_isShowTipTextAsSingleLine="false"
- app:qrcv_isTipTextBelowRect="false"
- app:qrcv_maskColor="#33FFFFFF"
- app:qrcv_qrCodeTipText="将二维码/条码放入框内,即可自动扫描"
- app:qrcv_rectWidth="200dp"
- app:qrcv_scanLineColor="@color/colorPrimaryDark"
- app:qrcv_toolbarHeight="56dp"
- app:qrcv_topOffset="90dp" />
- <include layout="@layout/toolbar"/>
- <include layout="@layout/view_control"/>

</RelativeLayout>```
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。