日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码

發布時間:2023/12/13 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我怎么有二維碼沒有聯系,最近遇到一個問題,,如何推斷條碼掃描到一維代碼或者二維代碼,辛苦了一個下午下班后自己,加上網上跟蹤信息。

總結出兩種方式能夠解決該問題(推薦採用另外一種方式):

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標示來推斷實行那些操作了

部分條碼規則:

<img src="http://img.blog.csdn.net/20141111234433467?

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

總結

以上是生活随笔為你收集整理的ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日鲁鲁| 97色在线观看 | 美女大bxxxxn内射 | 水蜜桃91 | 欧美性猛交乱大交xxxx | 亚洲一级片免费 | 精品一区在线观看视频 | 亚洲乱码国产乱码精品精的特点 | 日韩av一区二区在线 | a∨色狠狠一区二区三区 | 日本特黄一级 | 国产视频精品自拍 | 国产乱码精品1区2区3区 | 国产精彩视频在线观看 | 国产高潮视频 | 欧美日韩不卡一区 | 国产亚洲欧美在线视频 | 中文字幕十一区 | 男操女视频在线观看 | 日韩欧美高清片 | 91亚洲专区 | 免费毛片播放 | 99精品免费在线观看 | 美女网站在线免费观看 | 免费看黄色av | 精品一区二区视频 | 一级黄色欧美 | 欧美色图亚洲天堂 | 麻豆精品视频在线观看 | 国产在线无码精品 | 亚洲一区二区网站 | 亚洲成人久 | 日本免费成人 | 国产精品999视频 | 国产ts网站| 久久精品国产熟女亚洲AV麻豆 | 四虎精品视频 | 性午夜| 超碰人人在线 | 日女人网站 | 囯产精品一品二区三区 | 国产一区二区不卡视频 | 日韩精品欧美激情 | 成人免费版欧美州 | 日本特级黄色录像 | 国模私拍av | 色哟哟国产精品色哟哟 | 国产免费91| 国产一区二区内射 | 九月色婷婷 | 瑟瑟视频在线免费观看 | 国产又爽又黄无码无遮挡在线观看 | 精品欧美色视频网站在线观看 | 精品一区二区在线播放 | 天天射天天射 | 极品美女无套呻吟啪啪 | 中出白浆 | www.199麻豆| 在线免费观看亚洲 | 黄网视频在线观看 | 高h喷水荡肉少妇爽多p视频 | 国产草逼视频 | 在线观看三区 | 呦女精品 | 无码aⅴ精品一区二区三区浪潮 | 色哟哟av| 华人永久免费视频 | 黄色免费一级视频 | 色综合狠狠 | 亚洲精品在线免费 | 91欧美一区二区 | 欧美大尺度视频 | 午夜一区二区三区在线 | 成人三级晚上看 | sesese99| 春闺艳妇(h)高h产乳 | 交专区videossex | 国产在线国偷精品免费看 | www中文字幕 | 欧美99 | 久久国产片 | 久草视频精品在线 | 欧美视频一区 | 亚洲激情图 | 精品h视频 | 91香蕉国产在线观看 | 人人草av | 免费在线观看av | 亚洲国产成人精品一区二区三区 | 成在人线av | 夫の上司に犯波多野结衣853 | 亚洲无码久久久久 | а√天堂资源官网在线资源 | 免费黄色在线网址 | 亚洲第一在线视频 | 性生活视频网站 | 中文二区| 国产主播一区二区三区 | 久久国产精品99久久人人澡 |