Android二維碼掃描——BGAQRCode-Android

個人博客:haichenyi.com。感謝關注

??做過二維碼掃描的童鞋都知道姓惑,要用Zxing操灿,可是google官方推的Zxing,我們集成掃描的時候很慢拐纱,有時候就直接掃不出來铜异,體驗太差了。因為他適配了太多東西秸架,我們只要一個掃描功能揍庄,然后就去網(wǎng)上搜索,怎么使zxing掃描變的很快东抹,zxing的優(yōu)化蚂子,然后跟著網(wǎng)上的博客,一步一步走缭黔,即使最終做完了食茎,感覺體驗還是不夠好。我這里推薦一個二維碼掃描的開源框架——BGAQRCode-Android

??QRCode 掃描二維碼馏谨、掃描條形碼别渔、相冊獲取圖片后識別、生成帶 Logo 二維碼田巴、支持微博微信钠糊、QQ 二維碼掃描樣式挟秤。他把Zbar和Zxing壹哺,都做了優(yōu)化,掃描速度非乘腋眨快管宵,用戶體驗很好,用起來也非常方便

依賴

implementation 'cn.bingoogolapple:bga-qrcode-zbar:1.2.1'
或者
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1'

用法

以Zbar為例(Zxing類似)

第一步:XML文件

<cn.bingoogolapple.qrcode.zbar.ZBarView
        android:id="@+id/zbarview"
        style="@style/MatchMatch"
        app:qrcv_animTime="1000"
        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_isShowDefaultScanLineDrawable="true"
        app:qrcv_maskColor="#33FFFFFF"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_topOffset="90dp" />

自定義屬性說明

屬性名 說明 默認值
qrcv_topOffset 掃描框距離 toolbar 底部的距離 90dp
qrcv_cornerSize 掃描框邊角線的寬度 3dp
qrcv_cornerLength 掃描框邊角線的長度 20dp
qrcv_cornerColor 掃描框邊角線的顏色 @android:color/white
qrcv_rectWidth 掃描框的寬度 200dp
qrcv_barcodeRectHeight 條碼掃樣式描框的高度 140dp
qrcv_maskColor 除去掃描框攀甚,其余部分陰影顏色 #33FFFFFF
qrcv_scanLineSize 掃描線的寬度 1dp
qrcv_scanLineColor 掃描線的顏色「掃描線和默認的掃描線圖片的顏色」 @android:color/white
qrcv_scanLineMargin 掃描線距離上下或者左右邊框的間距 0dp
qrcv_isShowDefaultScanLineDrawable 是否顯示默認的圖片掃描線「設置該屬性后 qrcv_scanLineSize 將失效箩朴,可以通過 qrcv_scanLineColor 設置掃描線的顏色,避免讓你公司的UI單獨給你出特定顏色的掃描線圖片」 false
qrcv_customScanLineDrawable 掃描線的圖片資源「默認的掃描線圖片樣式不能滿足你的需求時使用秋度,設置該屬性后 qrcv_isShowDefaultScanLineDrawable炸庞、qrcv_scanLineSize、qrcv_scanLineColor 將失效」 null
qrcv_borderSize 掃描邊框的寬度 1dp
qrcv_borderColor 掃描邊框的顏色 @android:color/white
qrcv_animTime 掃描線從頂部移動到底部的動畫時間「單位為毫秒」 1000
qrcv_isCenterVertical 掃描框是否垂直居中荚斯,該屬性為true時會忽略 qrcv_topOffset 屬性 false
qrcv_toolbarHeight Toolbar 的高度埠居,通過該屬性來修正由 Toolbar 導致掃描框在垂直方向上的偏差 0dp
qrcv_isBarcode 是否是掃條形碼 false
qrcv_tipText 提示文案 null
qrcv_tipTextSize 提示文案字體大小 14sp
qrcv_tipTextColor 提示文案顏色 @android:color/white
qrcv_isTipTextBelowRect 提示文案是否在掃描框的底部 false
qrcv_tipTextMargin 提示文案與掃描框之間的間距 20dp
qrcv_isShowTipTextAsSingleLine 是否把提示文案作為單行顯示 false
qrcv_isShowTipBackground 是否顯示提示文案的背景 false
qrcv_tipBackgroundColor 提示文案的背景色 #22000000
qrcv_isScanLineReverse 掃描線是否來回移動 true
qrcv_isShowDefaultGridScanLineDrawable 是否顯示默認的網(wǎng)格圖片掃描線 false
qrcv_customGridScanLineDrawable 掃描線的網(wǎng)格圖片資源 null
qrcv_isOnlyDecodeScanBoxArea 是否只識別掃描框區(qū)域的二維碼 false

第二步:獲取控件,并實現(xiàn)QRCodeView.Delegate接口

QRCodeView mQRCodeView = (ZBarView) findViewById(R.id.zbarview);
mQRCodeView.setDelegate(this);


@Override
  public void onScanQRCodeSuccess(String result) {
    vibrate();
    Toast.makeText(this,result,Toast.LENGTH_SHORT).show();
    mQRCodeView.startSpot();
  }

  @Override
  public void onScanQRCodeOpenCameraError() {
    Toast.makeText(this,"錯誤",Toast.LENGTH_SHORT).show();
  }

第四步:實現(xiàn)onStart事期,onStop滥壕,onDestroy方法

@Override
  protected void onStart() {
    super.onStart();
    mQRCodeView.startCamera();//打開相機
    mQRCodeView.showScanRect();//顯示掃描框
    mQRCodeView.startSpot();//開始識別二維碼
    //mQRCodeView.openFlashlight();//開燈
    //mQRCodeView.closeFlashlight();//關燈
  }

  @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);
  }

第五步:添加權(quán)限

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>

經(jīng)過上面5步,掃描功能就已經(jīng)出來了兽泣,Zbar掃描比Zxing快绎橘,Zbar是基于C實現(xiàn)的,Zxing是基于C++唠倦。有個問題就是Zbar無法生成二維碼称鳞,如果你是集成的BGA的Zxing可以生成二維碼涮较。Zxing生成二維碼的方式如下:

耗時操作,新開線程

//中文
Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode("海晨憶", BGAQRCodeUtil.dp2px(this, 150));

//帶logo
Bitmap logoBitmap = BitmapFactory.decodeResource(TestGeneratectivity.this.getResources(), R.mipmap.logo);
QRCodeEncoder.syncEncodeQRCode("海晨憶", BGAQRCodeUtil.dp2px(TestGeneratectivity.this, 150), Color.parseColor("#ff0000"), logoBitmap);

解析圖片二維碼

//mEnglishLogoIv:顯示二維碼的控件
mEnglishLogoIv.setDrawingCacheEnabled(true);
Bitmap bitmap = mEnglishLogoIv.getDrawingCache();

//返回二維碼圖片里的內(nèi)容 或 null
String result = QRCodeDecoder.syncDecodeQRCode(bitmap);
String result = QRCodeDecoder.syncDecodeQRCode(picturePath);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冈止,一起剝皮案震驚了整個濱河市法希,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靶瘸,老刑警劉巖苫亦,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怨咪,居然都是意外死亡屋剑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門诗眨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唉匾,“玉大人,你說我怎么就攤上這事匠楚∥”欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵芋簿,是天一觀的道長峡懈。 經(jīng)常有香客問我,道長与斤,這世上最難降的妖魔是什么肪康? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮撩穿,結(jié)果婚禮上磷支,老公的妹妹穿的比我還像新娘。我一直安慰自己食寡,他們只是感情好雾狈,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抵皱,像睡著了一般善榛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叨叙,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天锭弊,我揣著相機與錄音,去河邊找鬼擂错。 笑死味滞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剑鞍,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昨凡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁署?” 一聲冷哼從身側(cè)響起便脊,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎光戈,沒想到半個月后哪痰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡久妆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年晌杰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筷弦。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肋演,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烂琴,到底是詐尸還是另有隱情爹殊,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布奸绷,位于F島的核電站梗夸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏健盒。R本人自食惡果不足惜绒瘦,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扣癣。 院中可真熱鬧,春花似錦憨降、人聲如沸父虑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽士嚎。三九已至,卻和暖如春悔叽,著一層夾襖步出監(jiān)牢的瞬間莱衩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工娇澎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笨蚁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像括细,于是被迫代替她去往敵國和親伪很。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容