Android最佳實踐(六)之掃描二維碼模塊

這是一個系列,咱們將其命名爲android最佳實踐,若是你尚未看以前的文章:android

Android最佳實踐(一)git

android最佳實踐(二)github

android最佳實踐(三)segmentfault

android最佳實踐(四)app

android最佳實踐(五)maven

上一節,咱們編寫了contact模塊,極大的簡化了聯繫人的獲取,並且提供了兩種方式,一種是經過手機內置app獲取聯繫人手機號碼,另一種是經過自寫UI,來獲取獲得聯繫人手機號碼。
這一節,咱們將會編寫qrcode模塊,該模塊致力於簡化掃描二維碼的代碼編寫,同時也加上了Android 6.0的動態權限檢查。ide

那麼咱們開始吧。gradle

多模塊的管理

現階段,咱們已經有兩個模塊了,那麼其對應得buildToolsVersion等都是同樣,那之後模塊多了,更改這些參數是否是會很是麻煩,有人說了我能夠在project中定義變量,而後在各個子模塊中引用,那麼真的有必要嗎,是否有更簡單的辦法。ui

下面是個人project中的build.gradle文件,其含義是除了app模塊,其餘子模塊一概爲依賴模塊,且定義了一些參數和內部庫,當咱們的子模塊有本身特殊的庫,你須要複寫dependencies就能夠了。this

subprojects{
    configure(allprojects - project(':app')) {
        apply plugin: 'com.android.library'
        android {
            compileSdkVersion 23
            buildToolsVersion '23.0.2'

            defaultConfig {
                minSdkVersion 16
                targetSdkVersion 23
                versionCode 1
                versionName "1.0"
            }
            lintOptions {
                abortOnError false
            }
        }
        dependencies {
            testCompile 'junit:junit:4.12'
            compile 'com.android.support:appcompat-v7:23.1.1'
        }
        apply from: '../gradle/maven_push.gradle'
    }
}

那麼例如咱們的掃描二維碼模塊,你就應該在該子模塊的gradle文件中添加以下代碼:

dependencies{
    compile 'com.google.zxing:core:3.2.0'
}

該含義爲添加google提供的zxing依賴包,你們能夠根據zxing依賴包進行二次開發,可是你會發現,使用zxing難度頗大,爲什麼沒有人進行其相關的二次封裝,我可以更簡單的調用呢,這就是我寫該模塊的目的。

工廠模式

該模塊使用工廠模式,將實現和接口分離,同時爲將來提供多樣化的產品帶來可能,用戶可定製掃描二維碼界面。同時提供了,該模塊適合於activity和fragment以及v4包中的fragment。

用法

在你的activity或者你的fragment中調用:

QrcodeFactory.newQrcode(this).start();

由於該方法會調用相關的界面,因此若是你想接收數據,須要在該類中重寫onActivityResult方法,在該方法內部調用QrCode模塊的onActivityResult方法。例如這樣:

@Override
    public void onActivityResult(int requestCode, int resultCode, final Intent data) {
        mQrcode.onActivityResult(requestCode, resultCode, data, new QrcodeCallback() {
            @Override
            public void onSuccess(@NonNull QrcodeInfo info) {
                String textInfo = "二維碼信息" + info.getResult() + "圖片高度" + info.getHeight() + "圖片寬度" + info.getWidth();
                mText.setText(textInfo);
                mImageView.setImageBitmap(info.getQrCodeImage());
            }

            @Override
            public void onFailed(@NonNull String errMsg) {
                mText.setText(errMsg);
            }
        });
    }

當你的app須要Android6.0的適配,你須要對獲取動態權限結果,你須要在該類中重寫onRequestPermissionsResult方法,例如這樣:

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        mQrcode.onRequestPermissionsResult(requestCode, permissions, grantResults, new com.neu.qrcode.callback.PermissionResultCallback() {
            @Override
            public void denyPermission() {
                mText.setText("App無權限");
            }
        });
    }

後續

掃描二維碼模塊,由於每一個公司都想有本身的掃描界面,因此自定義化掃描界面顯得尤其重要,而利用camera自定義掃描界面,代碼量和難度頗大,該項目後續會添加部分UI模板,適用於掃描界面的定製。你們能夠fork或star個人github,https://github.com/neuyu/android-best-practices

相關文章
相關標籤/搜索