Android實現條形碼與二維碼掃描

2022-01-20 開發者技術前線

有個二維碼是目前移動端和webAPP 常用是一種和用戶的交互方式,常用在社交,支付,電商app中,本文介紹實現條形碼與二維碼掃描。


在本次教程中,我們將使用ZXing庫讓我們的app實現條形碼和二維碼的掃描。

為什麼選擇ZXing

要實現條形碼和二維碼掃描功能,常用的有下面幾種方法:
使用Google Play Service和Mobile Vision APIs。
使用barcodescanner庫。
使用ZXing庫。

我們來仔細分析以上三種方法各自的優缺點。
第一種,使用Google Play Service和Mobile Vision APIs。不合適,因為不是所有的用戶設備都有安裝Google Play Service,特別是在中國。
第二種,使用barcodescanner。也不合適,儘管barcodescanner的導入非常簡單,識別也很快,但是UI的調整比較困難。特別是當UI非常複雜時,你就需要拉取整個項目的源碼然後自己進行定製。
現在就只剩下ZXing了。ZXing庫由谷歌出品,所以在短期內應該不會停止維護。很多應用,報錯barcodescanner,都是基於ZXingk開發的。使用ZXing我們不用擔心用戶沒有安裝Google Play Service,而聚焦於開發和處理結果本身。

ZXing是什麼

Zxing是Google提供的關於條碼(一維碼、二維碼)的解析工具,提供了二維碼的生成與解析的方法。

設置項目添加依賴

在你的build.gradle文件(application級別)中,添加ZXing core
的庫。

dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    // 其他的庫在這裡...    compile 'com.google.zxing:core:3.3.0'    testCompile 'junit:junit:4.12'}

添加必要的權限

在你的AndroidManifest.xml文件中,添加下面的代碼:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="io.github.marktony.espresso">    <uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.WAKE_LOCK" />    <uses-permission android:name="android.permission.VIBRATE" />     <application ...

導入必要的類和資源文件將整個包複製到你的項目中。


注意:上面的包中的代碼我做了簡化,如果你需要ZXing示例項目此部分的完整的代碼,請訪問這裡,並下載相應的代碼。
代碼文件導入完成後,我們還需要導入下面的資源文件:
res/layout/activity_scan
- CaptureActivity的布局文件.
res/values/zxing_ids.xml
- zxing id的集合.
res/raw/beep.ogg
- 當掃描成功後播放的聲音文件.
res/drawable/...
- 共3個文件: scan_line.png, qr_code_bg.9.png, shadow.png.

開動吧

現在我們從MainActivity啟動CaptureActivity並期待獲取相應的結果:

public class MainActivity extends AppCompatActivity {    public final static int SCANNING_REQUEST_CODE = 1;    private TextView textView;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView) findViewById(R.id.textView);        textView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);                startActivityForResult(intent, SCANNING_REQUEST_CODE);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            case SCANNING_REQUEST_CODE:                if (resultCode == RESULT_OK) {                    final Bundle bundle = data.getExtras();                    Handler handler = new Handler(Looper.getMainLooper());                    handler.post(new Runnable() {                        @Override                        public void run() {                            textView.setText(bundle.getString("result"));                        }                    });                }                break;            default:                break;        }    }}

我們可以在onActivityResult()方法中得到相應的結果。
注意: 如果你的app的target api level是23或者更高, 不要忘記適配運行時權限因為我們的app需要用到相機。

測試

現在我們可以測試app是否成功運行了。訪問 qr-code-generator.com生成你想要的二維碼,然後進行愉快的測試吧。我們可以期待獲得下面的結果:


結論

在這篇教程中,我們使用ZXing庫實現了條形碼和二維碼的掃描。在你自己的app中,你可能需要對掃描的結果進行進一步的處理,例如加載URL或者是從第三方數據源中獲取數據等等。
你可以在訪問Espresso項目主頁下載全部原始碼。Espresso是一個基於MVP架構,採用RxJava2, Retrofit2, Realm3.0, ZXing開發的快遞查詢App。

參考

ZXing - ZXing("Zebra Crossing")項目官方主頁。

作者:TonnyL

連結:http://www.jianshu.com/p/2bea07e0c1b9


技術 - 思維 - 感悟

相關焦點

  • iOS14 Beta2 代碼顯示蘋果ApplePay可能支持掃描二維碼支付
    iOS14 Beta2 代碼顯示蘋果ApplePay可能支持掃描二維碼支付 蘋果 iOS14Beta2 代碼顯示 ApplePay 可能支持掃描二維碼支付。
  • 條形碼怎麼申請?條形碼申請流程及報價
    條形碼在各種商品包裝上隨處可見,去商超購物結帳時也會用到,很多朋友都不太清楚商品條形碼申請
  • 蘋果將支持 Apple Pay 通過掃描二維碼進行付款
    該功能將允許用戶使用 Apple Pay 掃描 QR 碼進行付款,但目前並未實裝。▲ 圖源 9to5mac9to5mac 研究人員在 iOS 14 代碼中發現的注釋顯示:蘋果正在研究一種新的方法,通過掃描二維碼或使用 iPhone 相機的傳統條形碼,以幫助用戶通過 Apple Pay 進行行動支付。
  • [條形碼]天津註冊條形碼_註冊條形碼簡介
    關於條形碼條形碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組信息的圖形標識符。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條形碼可以標出物品的生產國、製造廠家、商品名稱、生產日期、圖書分類號、郵件起止地點、類別、日期等許多信息,因而在商品流通、圖書管理、郵政管理、銀行系統等許多領域都得到廣泛的應用。
  • 外媒:蘋果將支持Apple Pay通過掃描二維碼進行付款
    該功能將允許用戶使用 Apple Pay 掃描 QR 碼進行付款,但目前並未實裝。9to5mac 研究人員在 iOS 14代碼中發現的注釋顯示:蘋果正在研究一種新的方法,通過掃描二維碼或使用 iPhone 相機的傳統條形碼,以幫助用戶通過 Apple Pay 進行行動支付。
  • Android 設備上可以實現 3D Touch 嗎?|原力計劃
    作者 | Android_zhu_jiang責編 | 屠敏出品 | CSDN 博客蘋果在iPhone 6s和iPhone 6s Plus開始新增了3D Touch,這個功能褒貶不一,但我覺得還是特別好用的,特別是在微信上付款、加好友、掃二維碼,或是在支付寶上付款等等場景
  • 高性能得利捷3200VSI條形碼閱讀器優惠價
    這是第一臺條形碼掃描,它保留了高性能全向雷射掃描儀的掃描速度和寬大掃描角度的同時,引入了成像技術的好處。它的成像技術對於難以閱讀的條形碼,如破損碼,超規格誤差,印刷質量糟糕和GS1 DataBar條碼代碼,提供了出色的表現,並同時支持線性一維碼(1D)與二維碼標籤解碼。Datalogic Magellan 3200VSi掃描器能夠同時適應掠過掃描和演示掃描,確保了最高的生產力和人體工程學。
  • 票麵條形碼含個人信息 朋友圈曬票別忘遮"碼"
    法晚記者追問航空公司工作人員,機票和火車票的條形碼或者二維碼含有乘客的個人信息,包括身份證號等,不過需要專業的設備才能讀取。「白帽」黑客表示,雖然乘客的個人信息是經過加密的,但為避免洩露,還是不要輕易曬票。  發現 朋友圈流行曬票 網友提醒別「露碼」  「馬上起飛,三亞我來啦!」
  • Android開發技巧——使用Drawable實現小紅點
    ><menu xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:id="@+id/nav_wallet"        android:icon="@drawable/icon_menu_wallet"        android:title="@string
  • 一款能同時讀取RFID標籤並掃描條形碼的讀寫器
    FEIG Electronic推出了其移動ECCO + 讀寫器,能夠查詢RFID標籤和掃描條形碼。使用RFID應答器或條形碼對設備和機器進行的唯一標識可以在產品的整個生命周期中提供透明的記錄文檔。據該公司稱,此款讀寫器旨在簡化工作流程和識別零件。
  • 優酷推網頁二維碼掃描功能
    記者近日獲悉,優酷在網頁版的視頻播放框下面增加了一個二維碼的標識,點開後用戶可以通過二維碼掃描,將正在看的視頻「轉移」到行動裝置上繼續觀看。在網絡視頻中應用二維碼優酷還是首家,雖然已有雲記錄功能,可以讓優酷用戶跨屏隨時隨地看視頻,但二維碼功能的上線,讓優酷用戶無線視頻觀看更加多樣化。
  • Excel數據生成可變二維碼操作
    二維碼,其實就是用特定的幾何圖形按一定規律在平面(即二維方向上)分布雙相間的矩形方陣,記錄數據符號信息的新一代條碼技術,看上去像一個雙方形迷宮。它區別於常見的條形碼(即一維碼)。在信息表達上,二維碼能在橫向和縱向兩個方位同時表達不同信息,因此可存儲的信息量是條形碼的幾十倍,並能整合圖像、聲音、文字等信息;在功能上,二維碼不但具有基本識別功能,而且可顯示更詳細的產品內容。它不僅讀取方便,還能節約紙張。二維碼有許多種類,其中常見的QR二維碼,是1994年由Denso-Wave公司發明的,QR即英文Quick Response(快速反應)的縮寫。
  • 「曬」機票可能洩露個人信息 登機牌條形碼隱藏姓名及證件號碼隱私
    春節外出旅遊,很多人除了在朋友圈「曬」美景、「曬」自拍,有時還會「曬」機票,卻很少有人會對不起眼的條形碼進行遮擋。據央視新聞報導,登機牌上標註著很多有效信息,除姓名和證件號外,還有詳細的航班登記資料,例如航空公司會員編號、預定航班記錄編號、條形碼、二維碼等。
  • PHP和JS判斷是否微信掃描進入網頁的方法
    最近做了一個頁面,有一個部分是用手機下載android的APP應用,手機點擊按鈕就能下載apk文件進行安裝。沒想到在微信中出了問題,微信掃描二維碼進入網頁有,點擊apk下載連結毫無反應。 最近做了一個頁面,有一個部分是用手機下載android的APP應用,手機點擊按鈕就能下載apk文件進行安裝。沒想到在微信中出了問題,微信掃描二維碼進入網頁有,點擊apk下載連結毫無反應。
  • 寶貝隨時淘 手機淘寶Android最新版
    近日,最新版的手機淘寶客戶端Android 1.2.10發布,現在使用這個新版手機淘寶安卓客戶端,隨時用手機進行條形碼掃描或者用語音說出商品名稱,就可以直觀和淘寶對比價格,用手機隨時隨地暢享媲美甚至更勝PC的購物體驗。
  • 常見二維碼上那些奇怪的圖案是什麼
    定位圖形就是圖中連接三個位置探測圖形之間的兩根「線」,它的作用是決定二維碼符號中模塊的坐標,而分隔符的作用是將位置探測圖形與符號的其餘部分分開。也就是說,通過掃描能讀取的數據信息在二維碼中的位置是由定位圖形和分隔符決定的。
  • 求證:火車票二維碼已被強加密
    記者通過蘋果APP下載了4款軟體:「我查查」、「1步掃描器」、「條碼掃描」和「Quick Scan」,其中「Quick Scan」為英文軟體。通過安卓應用匯下載的軟體名為「我查查」、「快拍二維碼」、「二維碼掃描」。這些軟體基本上都位於掃描軟體下載熱門榜前列。 記者首先用蘋果手機檢驗,將今年6月、9月的火車票二維碼置於手機攝像頭之下,依次運行不同的掃描軟體。
  • 騰訊手機管家升級 掃描二維碼即可登錄
    4月22日,騰訊手機管家低調發布,除了全新UI設計和全新架構外,備受關注的就是掃描電腦QQ上的二維碼即可完成QQ安全登錄的創新功能。登陸QQ,顯然使用騰訊手機管家是最安全、可信賴的選擇。分析認為,騰訊手機管家先鋒版與QQ登錄結合,一方面滿足了QQ用戶安全登錄需求;另外,也體現了手機管家先鋒版與其他手機安全軟體的差異化賣點。
  • 條形碼二維碼一應俱全 這樣的「費列羅」巧克力居然是假的?
    以一款某品牌假冒巧克力為例,產品在外包裝上跟正品高度相似,條形碼、二維碼等一應俱全,如果不是專業檢測機構進行檢測,消費者想要辨別,難度很大。
  • 南航國內首創掃登機牌二維碼查航班動態服務-中國民航網
    南航國內首創掃登機牌二維碼查航班動態服務 2016-10-28 15:25:00來源:中國民航網T 大T 小