我怎么有二维码没有联系,最近遇到一个问题,,如何推断条码扫描到一维代码或者二维代码,辛苦了一个下午下班后自己,加上网上跟踪信息。

总结出两种方式能够解决该问题(推荐採用另外一种方式):

1.改动源代码(详细后面会提到)

2.通过返回的编码来推断

实现方式一:

源代码的改动,关键涉及到三个类,CaptureActivity、DecodeThread、DecodeFormatManager

1.首先让我们来看下Zxing的源代码。里面有一个DecodeFormatManager编码管理类:该来原本的final类,由于须要用到该类里的一些參数,所以要把它变成普通类,可是不知道这样改变以后对原本的代码结构是否有影响。

还有就是有几个变量也是常量型的,这里要都要改成static类型的:

public class DecodeFormatManager {
//final class DecodeFormatManager {
public static Vector<BarcodeFormat> PRODUCT_FORMATS;
public static Vector<BarcodeFormat> ONE_D_FORMATS;
public static Vector<BarcodeFormat> QR_CODE_FORMATS;
public static Vector<BarcodeFormat> DATA_MATRIX_FORMATS; //static final Vector<BarcodeFormat> PRODUCT_FORMATS;
//static final Vector<BarcodeFormat> ONE_D_FORMATS;
//static final Vector<BarcodeFormat> QR_CODE_FORMATS;
//static final Vector<BarcodeFormat> DATA_MATRIX_FORMATS; static {
PRODUCT_FORMATS = new Vector<BarcodeFormat>(5);
PRODUCT_FORMATS.add(BarcodeFormat.UPC_A); // UPC标准码(通用商品)
PRODUCT_FORMATS.add(BarcodeFormat.UPC_E); // UPC缩短码(商品短码)
PRODUCT_FORMATS.add(BarcodeFormat.EAN_13);
PRODUCT_FORMATS.add(BarcodeFormat.EAN_8);
PRODUCT_FORMATS.add(BarcodeFormat.RSS14); ONE_D_FORMATS = new Vector<BarcodeFormat>(PRODUCT_FORMATS.size() + 4);
ONE_D_FORMATS.addAll(PRODUCT_FORMATS); //此处将PRODUCT_FORMATS中加入的码加入到ONE_D_FORMATS
ONE_D_FORMATS.add(BarcodeFormat.CODE_39);
ONE_D_FORMATS.add(BarcodeFormat.CODE_93);
ONE_D_FORMATS.add(BarcodeFormat.CODE_128);
ONE_D_FORMATS.add(BarcodeFormat.ITF); QR_CODE_FORMATS = new Vector<BarcodeFormat>(1);//QR_CODE即二维码
QR_CODE_FORMATS.add(BarcodeFormat.QR_CODE); DATA_MATRIX_FORMATS = new Vector<BarcodeFormat>(1);
DATA_MATRIX_FORMATS.add(BarcodeFormat.DATA_MATRIX);//也属于一种二维码
}
}

该类中主要就是把一些经常使用的条码格式给加入到Vector<BarcodeFormat>集合里面,当中有一维码、二维码等。

最后一个DATA_MATRIX这个也属于是一种二维码。

2.上面的改动完了一会,然后是DecodeThread。这个是解码类

这里不须要我们做什么操作,仅仅要知道这里是怎样解码的即可了,关键的地方就是这里:

if (decodeFormats == null || decodeFormats.isEmpty()) {
decodeFormats = new Vector<BarcodeFormat>();
decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS); // 一维码
decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS); // 二维码
decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS); }

这里把之前加入好的几个常量类,加入到解码的方法里面去,这样解码方法里面就有了全部的解码格式了。包含一维码和二维码。



3.关键的地方来了。CaptureActivity,扫描后返回信息的类。

Zxing源代码相信大家都能下到,也知道扫描后返回的值,里面有一个public void handleDecode(Result result, Bitmap barcode);方法,

返回的值就是在这里:

// 扫描后的结果  和  编码

Log.e("编码: ------>",result.getBarcodeFormat().toString()+"   数据:"+result.getText());

关键是这一句话:

result.getBarcodeFormat().toString()  返回的就是编码格式。

result.getText();  返回的才是扫描的值。

所以,我们主须要推断之前的编码管理类里的向量数组是否包括这个字段就OK了,迭代:

	/**********************************************
* 注:此处依据 拍码后返回的编码格式 与 DecodeFormatManager
* 类中的二维码 编码格式 进行对照
*
* 同样则将标示字段赋值为1(即一维码)
* 否者则将标示字段赋值为2(即二维码)
**********************************************/
int size = DecodeFormatManager.ONE_D_FORMATS.size(); //遍历一维码字符集
for (int i = 0; i < size; i++) {
Log.e(" 一维码编码格式 ------>",DecodeFormatManager.ONE_D_FORMATS.get(i)+"");
//此处依据 拍码后返回的编码格式 与 DecodeFormatManager类中的一维码 编码格式 进行对照
//同样则将标示字段赋值为1(即一维码) 否者将标示字段赋值为2(即二维码)
if(DecodeFormatManager.ONE_D_FORMATS.get(i).equals(mBarcodeFormat)){
ONE_D_FORMATS = 1;
}else {
QR_CODE_FORMATS = 2;
}
}

实现方式二:



在public void handleDecode(Result result, Bitmap barcode);方法中加入两个常量,自己定义QR_CODE和
DATA_MATRIX两个常量码,然后当扫描返回时。通过result.getBarcodeFormat().toString()获得返回编码。再依据该返回码与自己定义的编码去比对。然后定义个字符串或int变量作为标示,例如以下:

  int CODE_TYPE = -1;      //标示 (1一维码、 2、二维码   3、其它码)
final String QR_CODE = "QR_CODE"; //二维码
final String DATA_MATRIX = "DATA_MATRIX"; //其它码 //扫描获取的 编码 不为空
if(!TextUtils.isEmpty(result.getBarcodeFormat().toString())){ String mBarcodeFormat = result.getBarcodeFormat().toString(); //拍码后返回的编码格式 if(mBarcodeFormat.equals(DATA_MATRIX)){
CODE_TYPE = 3;
}else if(mBarcodeFormat.equals(QR_CODE)){
CODE_TYPE = 2;
}else {
CODE_TYPE = 1;
}
Log.e("---> (1一维码、 2、二维码 3、其它码) ",""+CODE_TYPE);

接着后面就能够 switch 这个CODE_TYPE标示来推断实行那些操作了

部分条码规则:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvX2NodW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码的更多相关文章

  1. 三维码 & 二维码 & 一维码

    三维码 & 二维码 & 一维码 3D, 2D, 1D 防伪国家标准 -<结构三维码防伪技术条件> http://www.xinhuanet.com/tech/2019-12 ...

  2. zxing解析生成一维码二维码

    @web界面实现扫一扫 二维码工具类 package util; import java.awt.BasicStroke; import java.awt.Graphics; import java. ...

  3. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

  4. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  5. Java生成扫描可以生成手机号名片的二维码

    (1)需求:用户通过扫描pc端网站后台管理系统的二维码获取对接人的相关信息,主要是是手机号信息,达到点击可以直接打电话或者将对接人的信息直接保存到通讯录 注:源码来源:https://blog.csd ...

  6. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  7. Android快速实现二维码扫描--Zxing

    Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...

  8. Android高级控件(三)——&#160;使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  9. Android—ZXing二维码扫描遇到的问题

    最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...

随机推荐

  1. ios qq 分享 失败

    1. TencentOAuth 是需要调用,但QQ代码共享是没有解释.共享代码如下面: TencentOAuth *auth = [[TencentOAuth alloc] initWithAppId ...

  2. Swift - iOS中各种视图控制器(View Controller)的介绍

    在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...

  3. Java 获取到配置文件信息

    Java程序将数据库或者服务器IP写入到代码中,难免缺少灵活性. 如果写入到配置文件,部署到不通服务器上,只需要修改配置文 件即可. Java怎么读取配置文件 /** * 获取到配置文件信息 * @p ...

  4. 如何使用springmvc的@requestbody 返回json数据

    先配置 XXX_ servletxml <!-- 整合jackson 返回一个json格式 --><bean class="org.springframework.web. ...

  5. Android Studio经常使用操作技巧(不断更新)

    这段时间一直在用Android Studio做一些Demo的开发.一開始从Eclipse中转向这个开发工具,各种不适应,希望此博文能够一直更新.还有网友能够分享出自己方便更好更快开发的一些技巧. 首先 ...

  6. Swift - 手机摇晃的监测和响应

    摇晃手机也是一种常用的交互手段(比如微信摇一摇功能).iOS SDK中已经将shake事件方便地融合进去了,就像触发touch事件一样简单,发生摇晃事件后程序会自动执行. 1 2 3 4 5 6 7 ...

  7. asp.net2.0安全性(3)--验证与授权--转载来自车老师

    "验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...

  8. java调用C#的dll

    链接地址:http://www.cnblogs.com/yinhaiming/articles/1712463.html .net产生的比java晚,其类库的封装在某些方面也比java更优秀,更全面. ...

  9. UVA 2039 Pets(网络流)

    Problem Description Are you interested in pets? There is a very famous pets shop in the center of th ...

  10. hdu 4117 GRE Words (ac自动机 线段树 dp)

    参考:http://blog.csdn.net/no__stop/article/details/12287843 此题利用了ac自动机fail树的性质,fail指针建立为树,表示父节点是孩子节点的后 ...