這是一個系列,咱們將其命名爲android最佳實踐,若是你尚未看以前的文章:android
android最佳實踐(二)github
android最佳實踐(三)segmentfault
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。