这是一个系列,我们将其命名为android最佳实践,如果你还没有看之前的文章:

Android最佳实践(一)

android最佳实践(二)

android最佳实践(三)

android最佳实践(四)

android最佳实践(五)

上一节,我们编写了contact模块,极大的简化了联系人的获取,而且提供了两种方式,一种是通过手机内置app获取联系人手机号码,另外一种是通过自写UI,来获取得到联系人手机号码。
这一节,我们将会编写qrcode模块,该模块致力于简化扫描二维码的代码编写,同时也加上了Android 6.0的动态权限检查。

那么我们开始吧。

多模块的管理

现阶段,我们已经有两个模块了,那么其对应得buildToolsVersion等都是一样,那以后模块多了,更改这些参数是不是会非常麻烦,有人说了我可以在project中定义变量,然后在各个子模块中引用,那么真的有必要吗,是否有更简单的办法。

下面是我的project中的build.gradle文件,其含义是除了app模块,其他子模块一律为依赖模块,且定义了一些参数和内部库,当我们的子模块有自己特殊的库,你需要复写dependencies就可以了。

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。

更多相关文章

  1. android sdk manager 下载更新失败
  2. android 仿微信聊天界面,以及语音录制功能
  3. android 仿微信聊天界面,以及语音录制功能
  4. Android(安卓)SDK Manager 更新
  5. android 仿微信聊天界面,以及语音录制功能
  6. android 仿微信聊天界面,以及语音录制功能
  7. Android简单登录界面
  8. Failed to fetch URL http://dl-ssl.google.com/android/reposit
  9. android软键盘挤压界面的问题解决方法

随机推荐

  1. Android中资源的访问
  2. Android 常用控件讲解
  3. Eclipse上基于Android SDK的开发
  4. 用 Eclipse 开发 Android 应用程序
  5. Android 的视频编码 H263 MP4V H264
  6. Android 复习 Content Provider
  7. 【Android Developers Training】 53. 打
  8. Android中日期和时间控件的使用
  9. Android actionbar
  10. android 项目打包成Library