文章大綱
一、條形碼、二維碼掃描框架介紹
二、條形碼、二維碼的區(qū)別和組成結(jié)構(gòu)介紹
三、條形碼、二維碼掃描框架應(yīng)用場景
四、BGAQRCode-Android框架實戰(zhàn)
五、項目源碼下載
六、參考文章
一、條形碼、二維碼掃描框架介紹
Android二維碼掃描是一種常見的功能開發(fā),但是技術(shù)選型不當(dāng)會造成初期開發(fā)難度大、后期維護成本高。常見的Android二維碼掃碼解決方案很多,比如ZXing,barcodescanner和BGAQRCode-Android等等。以下給出這三種典型二維碼解決方案的異同和開發(fā)場景。
(1)ZXing是諸多二維碼掃碼解決方案的核心引用庫,見附錄文章2。很多第三方的二維碼解決方案都是基于ZXing二次定制開發(fā)。但是集成和直接基于ZXing二次定制開發(fā)比較繁瑣和麻煩,除非非常必要,我個人不建議開發(fā)者直接使用ZXing集成開發(fā)。
(2)由于ZXing的以上原因,很多第三方二維碼掃碼解決方案應(yīng)運而生。其中barcodescanner就是這樣,barcodescanner在github上的項目主頁:https://github.com/dm77/barcodescanner , barcodescanner最大的特點是集成簡單,掃描速度較快,比較穩(wěn)定,很便于開發(fā)者迅速集成開發(fā)。但是barcodescanner的不太靈活UI調(diào)整,如果設(shè)計要求二維碼掃描界面比較復(fù)雜的UI要求,那么就需要把barcodescanner的整體代碼都拖下來,自己再次改造定制。
(3)BGAQRCode-Android也是一種二維碼掃描解決方案,其在github上的項目主頁:https://github.com/bingoogolapple/BGAQRCode-Android , BGAQRCode-Android也和barcodescanner一樣簡單易用,然而更加便于定制開發(fā)。我個人喜歡使用BGAQRCode-Android。
二、條形碼、二維碼的區(qū)別和組成結(jié)構(gòu)介紹
1. 演示圖
2. 組成結(jié)構(gòu)
2.1 一維碼
條形碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規(guī)則排列,用以表達一組信息的圖形標(biāo)識符。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。
其對應(yīng)字符由一組阿拉伯?dāng)?shù)字組成,供人們直接識讀或通過鍵盤 向計算機輸入數(shù)據(jù)使用。這一組條空和相應(yīng)的字符所表示的信息是相同的。
通用商品條形碼一共有13位,一般由前綴部分、制造廠商代碼、商品代碼和校驗碼4個部分組成。
前綴部分
由第1到第3位構(gòu)成,是用來標(biāo)識國家或地區(qū)的代碼,賦碼權(quán)在國際物品編碼協(xié)會,如 00-09代表美國、加拿大。45、49代表 日本。69代表中國大陸,471 代表中國臺灣地區(qū),489 代表香港特區(qū)。
制造廠商代碼
由第4到第7位構(gòu)成,是用來標(biāo)識不同生產(chǎn)廠家的代碼,賦碼權(quán)在各個國家或地區(qū)的物品編碼組織,中國由國家物品編碼中心賦予制造廠商代碼。
商品代碼
由第8到第12位構(gòu)成,是各個廠商用來標(biāo)識自己商品的代碼,賦碼權(quán)由產(chǎn)品生產(chǎn)企業(yè)自己行使,可以組成10000個不同的商品代碼。
校驗碼
由第13位構(gòu)成,用來校驗商品條形碼中左起第1-12數(shù)字代碼的正確性。這一位的數(shù)字是由前12位數(shù)字按照一定規(guī)則計算出來的,若讀取出的前12位按照該規(guī)則計算出的數(shù)字跟第13位不符合,則表示讀取失敗,是條形碼的一種驗錯措施。
2.2 二維碼
二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的,二維碼是一種比一維碼更高級的條碼格式。一維碼只能在一個方向(一般是水平方向)上表達信息,而二維碼在水平和垂直方向都可以存儲信息。一維碼只能由數(shù)字和字母組成,而二維碼能存儲漢字、數(shù)字和圖片等信息,因此二維碼的應(yīng)用領(lǐng)域要廣得多。
以使用廣泛的QR(Quick-Response) CODE為例,主要由定位圖形、格式信息、版本信息、數(shù)據(jù)和糾錯信息5部分構(gòu)成。
定位圖形
用于對二維碼的定位,一共有個數(shù)為3,即3個定位圖形可標(biāo)識一個矩形,同時可以用于確認二維碼的大小和方向;
格式信息
存在于所有的尺寸中,用于存放一些格式化數(shù)據(jù)。表示改二維碼的糾錯級別,分為L、M、Q、H;
版本信息
即二維碼的規(guī)格,在 >= Version 7以上,需要預(yù)留兩塊3 x 6的區(qū)域存放一些版本信息。
數(shù)據(jù)信息和糾錯信息
實際保存的二維碼信息(Data Code 數(shù)據(jù)碼)和糾錯信息(Error Correction Code 糾錯碼)(用于修正二維碼損壞帶來的錯誤)。
三、條形碼、二維碼掃描框架應(yīng)用場景
(1)信息獲?。?、地圖、WIFI密碼、資料)
(2)網(wǎng)站跳轉(zhuǎn)(跳轉(zhuǎn)到微博、手機網(wǎng)站、網(wǎng)站)
(3)廣告推送(用戶掃碼,直接瀏覽商家推送的視頻、音頻廣告)
(4)手機電商(用戶掃碼、手機直接購物下單)
(5)防偽溯源(用戶掃碼、即可查看生產(chǎn)地;同時可以獲取最終消費地)
(6)優(yōu)惠促銷(用戶掃碼,下載電子優(yōu)惠券,抽獎)
(7)會員管理(用戶手機上獲取電子會員信息、VIP服務(wù))
(8)手機支付(掃描商品二維碼,通過銀行或第三方支付提供的手機端通道完成支付
(9)登陸管理(不需輸入賬戶,密碼,掃碼登陸)
四、BGAQRCode-Android框架實戰(zhàn)
1. build.gradle添加引用
compile 'com.google.zxing:core:3.2.1'
compile 'cn.bingoogolapple:bga-qrcodecore:1.1.7@aar'
compile 'cn.bingoogolapple:bga-zxing:1.1.7@aar'
2. 新建xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas./apk/res/android"
xmlns:app="http://schemas./apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxingview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:qrcv_animTime="1000"
app:qrcv_borderColor="@android:color/white"
app:qrcv_borderSize="1px"
app:qrcv_cornerColor="@android:color/holo_green_light"
app:qrcv_cornerLength="20dp"
app:qrcv_cornerSize="5dp"
app:qrcv_isShowDefaultScanLineDrawable="true"
app:qrcv_isShowTipTextAsSingleLine="true"
app:qrcv_isTipTextBelowRect="true"
app:qrcv_maskColor="#64000000"
app:qrcv_qrCodeTipText="將二維碼放入框內(nèi),自動掃描"
app:qrcv_rectWidth="200dp"
app:qrcv_scanLineColor="@android:color/holo_green_light"
app:qrcv_scanLineSize="2dp"
app:qrcv_tipTextColor="@android:color/white"
app:qrcv_tipTextMargin="15dp"
app:qrcv_tipTextSize="18dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/start_spot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="開始掃碼" />
<Button
android:id="@+id/stop_spot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="暫停掃碼" />
<Button
android:id="@+id/open_flashlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="開燈" />
<Button
android:id="@+id/close_flashlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="關(guān)燈" />
</LinearLayout>
</RelativeLayout>
3. Java代碼
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView;
public class MainActivity extends Activity {
private QRCodeView mQRCodeView;
private Activity activity;
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
activity = this;
setContentView(R.layout.activity_main);
mQRCodeView = (ZXingView) findViewById(R.id.zxingview);
mQRCodeView.changeToScanQRCodeStyle();
4. 添加相機、閃光燈、震動權(quán)限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
5. 運行項目并訪問
五、項目源碼下載
鏈接:https://pan.baidu.com/s/1rQOyYKJIVcpzlUCvsgPBXQ
六、參考文章
- https://blog.csdn.net/csdn_aiyang/article/details/78983090
- https://blog.csdn.net/zhangphil/article/details/69625321
- https://blog.csdn.net/dcrmg/article/details/52106805