美文网首页简化开发Androidandroid技术
Android使用ZXing实现扫码功能

Android使用ZXing实现扫码功能

作者: Jeremy不爱吃辣 | 来源:发表于2020-09-14 15:08 被阅读0次

最近正在开发app,基本功能已开发完成,剩下扫码识别功能。之前上级已经写了一版,不是很好用,让我自己好好琢磨一下。针对这种功能需求,一般就先google,看有没有现成的代码可用,不出所料,果然有很多。自己在github上找了个最符合我app使用场景,且stat数很高的工程。down下来后,先阅读下作者的代码,发现迁移到我的代码中步骤十分简单。源地址:原作者github

一、build.gradle中添加依赖

    implementation 'pub.devrel:easypermissions:1.0.1'
    implementation 'cn.bingoogolapple:bga-photopicker:1.2.8@aar'
    implementation 'cn.bingoogolapple:bga-baseadapter:1.2.9@aar'
    implementation 'cn.bingoogolapple:bga-flowlayout:1.0.0@aar'
    implementation 'com.github.bumptech.glide:glide:4.7.1'
    // scanningCode
    implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'

二、添加TestScanActivity

微信图片_20200914145931.png
这里基本不用做太大改动,拷贝即食,如有其他逻辑,自行添加即可。AndroidManifest.xml中记得也要添加TestScanActivity!!

三、设计扫码页面Layout

scanningLayout.png

扫码界面如果想图简便,可直接使用原作者的xml文件,不过要注意的是此文件中有view_contro.xml以及其他关联的style文件,需一并cory到自己的项目中。我这里暂时将用不到的TextView删除掉了,另外新增了一个Button按钮,用于将扫描结果返回到触发界面。还有一点就是,原作者是将扫描结果显示到顶部的toolbar上显示,我的app已经有toolbar了,所以在copy下的xml文件中将其删除了,使用自己的原有布局。

四、重构业务代码

  public void ibInspectionPlanNo_OnClick(View view) {
        Intent intent = new Intent(this, TestScanActivity.class);
        startActivityForResult(intent, App.SCANNING_REQUEST_CODE);
    }

这里是主界面跳转至扫码界面

@Override
    public void onScanQRCodeSuccess(String result) {
        scanningResuslt = result;
        setTitle("扫描结果为:" + result);
        vibrate();
        mZXingView.startSpot(); // 开始识别
    }

ScanActivity中重写的这个方法接收的参数为扫码识别结果,这里需要说明的是scanningResult是我声明的一个全局变量,作用是当用户点击确认扫描结果按钮时。将扫描结果传递到其他界面,用于其他业务逻辑处理。

public void btnSubmit_OnClick(View view) {
        Intent intent = new Intent();
        //绑定result_code跟intent内容
        intent.putExtra("scanningResult", scanningResuslt);
        setResult(RESULT_OK, intent);
        finish();
    }

这里是我给新增的确认扫描结果按钮绑定了一个函数,用于将扫描结果使用Intent传递到主界面显示。

onClick.png

TextView相关的点击事件代码基本可以不用做改动直接用就完了!!

 @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case App.SCANNING_REQUEST_CODE:
                if (resultCode == RESULT_OK) {
                    String scanningResult = data.getStringExtra("scanningResult");
                    if (scanningResult != null && !"".equals(scanningResult)) {
                        mBinding.etInspectionPlanNo.setText(scanningResult);
                        long inspectionPlanId = localInspectionRepository.getInspectionPlanId(mBinding.etInspectionPlanNo.getText().toString().trim());
                        inspection.setInspectionPlanId(inspectionPlanId);
                    }
                }
                break;

最后在调用界面onActivityResult方法中,接收返回的扫码结果,根据自己的业务场景写相关代码就ok了。

本编文章主要记录自己如何将第三方的扫码代码移植到自己项目中,无任何核心代码,CV大法足矣。如果迁移过程中还有问题的话,就去看原作者的github吧。

相关文章

网友评论

    本文标题:Android使用ZXing实现扫码功能

    本文链接:https://www.haomeiwen.com/subject/lmrzektx.html