1. 程式人生 > >Android超方便 整合 Zxing實現掃一掃,閃光燈,生成二維碼圖片,解析二維碼(條碼)等功能

Android超方便 整合 Zxing實現掃一掃,閃光燈,生成二維碼圖片,解析二維碼(條碼)等功能

之前我寫過一篇部落格是關於如何將zxing整合到Android Studio中,以及簡單的實現掃一掃功能。
詳情請看:Android Studio整合Zxing掃一掃

但是,上面那篇部落格只有有一個掃一掃功能,而且在低解析度手機上會出現變形的問題。掃描速度也比較慢,功能不是很全,沒有閃光燈,生成二維碼,解析二維碼圖片,解析條碼圖片等。
這幾天抽了點時間,將之前的程式碼完善了一下,主要是修復了一些bug,增加了解析二維碼圖片,條碼圖片,生成二維碼圖片,閃光燈等。還簡化了整合的方式,只需要新增一下依賴就能使用了,具體效果圖如下。

有圖有真相

1.基本的掃一掃

掃描二維碼

從圖片可以看到,我掃的二維碼還是挺複雜的一個二維碼,識別速度還可以。具體使用跟裝置的攝像頭配置有很大關係。

這裡寫圖片描述

掃描條碼(準確率不太高,後期再想辦法優化吧,畢竟掃條碼不是太常用)

這裡寫圖片描述

2.閃光燈(如果裝置支援閃光的話,顯示閃光燈按鈕,否則不會顯示)

這裡寫圖片描述

3.解析二維碼圖片

這裡寫圖片描述

4.解析條碼圖片

這裡寫圖片描述

5.生成二維碼(可以新增logo)

這裡寫圖片描述

掃描下載APK體驗一下

可以先下載APK體驗一下:

或者直接用瀏覽器掃描下載,不需要積分

這裡寫圖片描述

使用方法

在使用上比之前版本簡化了很多步驟,目前的版本應該足夠日常使用了,如果你需要定製介面或者使用其中的某些功能,你可以直接去github下載demo,直接將moudle依賴到你的專案中,然後修改原始碼即可。覺得還行話記得給個start哦,我會持續進行優化的。

這裡我只介紹直接依賴的使用方法。
1.新增依賴

在根build.gradle中新增maven { url 'https://jitpack.io' }

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

在你的app的build.gradle中新增依賴implementation 'com.github.yuzhiqiang1993:zxing:2.1.4'

當前並非最新版本,請到github上獲取最新版本號,以免在使用過程中出現問題。


最新版本

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])


    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:support-vector-drawable:26.1.0'
    /*新增依賴*/
    implementation 'com.github.yuzhiqiang1993:zxing:2.1.4'

}

如果你的gradle版本是2.x的 用compile代替implementation 即可。

2.依賴新增完之後就可以使用了
首先記得申請許可權,本來我是把許可權給整合到庫裡的,但是這樣的話會導致首次跳轉到掃描頁面申請許可權時會阻塞,直到給許可權為止,想了想還是把許可權放開,在跳轉掃描介面之前自己去處理許可權比較好。

下面是需要動態申請的許可權

Manifest.permission.CAMERA
Manifest.permission.READ_EXTERNAL_STORAGE

跳轉到掃描介面

如下面程式碼所示,直接使用intent即可,也可以傳一個ZxingConfig類,這個類可以控制是否顯示底部的佈局,是否播放提示音等,也可不傳。

         Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
         /*ZxingConfig是配置類  可以設定是否顯示底部佈局,閃光燈,相簿,是否播放提示音  震動等動能
         * 也可以不傳這個引數
         * 不傳的話  預設都為預設不震動  其他都為true
         * */

        //ZxingConfig config = new ZxingConfig();
        //config.setShowbottomLayout(true);//底部佈局(包括閃光燈和相簿)
        //config.setPlayBeep(true);//是否播放提示音
        //config.setShake(true);//是否震動
       //config.setShowAlbum(true);//是否顯示相簿
        //config.setShowFlashLight(true);//是否顯示閃光燈
        //intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);
        startActivityForResult(intent, REQUEST_CODE_SCAN);

在onActivityResult中接收解析的結果

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 掃描二維碼/條碼回傳
        if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
            if (data != null) {

                String content = data.getStringExtra(Constant.CODED_CONTENT);
                result.setText("掃描結果為:" + content);
            }
        }
    }

好了,實現一個基本的掃一掃就是如此的簡單

生成二維碼

如果你有生成二維碼的需求,可以直接通過CodeCreator.createQRCode(contentEtString, 400, 400, null);即可。

                try {
                    /*
                    * contentEtString:字串內容
                    * w:圖片的寬
                    * h:圖片的高
                    * logo:不需要logo的話直接傳null
                    * */

                    Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                    bitmap = CodeCreator.createQRCode(contentEtString, 400, 400, logo);
                } catch (WriterException e) {
                    e.printStackTrace();
                }

好了,基本就是這些了,上面有github地址,覺得好用的話給個start呦!是在不想使用github的話這裡給出原始碼demo,需要的可以下載