最近正在开发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开发扫一扫功能,Android使用ZXing实现扫码功能相关推荐

  1. Android开发— 2016_最流行的Android组件、工具、框架大全(二)

    2019独角兽企业重金招聘Python工程师标准>>> 泡在网上的日子 首页 代码 话题 问答 标签 关于 登录注册 首页 › 安卓开发 › android开发 Android开发- ...

  2. Android开发-AMD平台如何使用Android studio自带模拟器

    Android开发-AMD平台如何使用Android studio自带模拟器 前言 AMD开启虚拟化VT win10专业版开启 win10家庭版开启 创建Android模拟器 前言 现在Android ...

  3. Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android

    转载:http://www.android100.org/html/201507/15/165084.html Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈andro ...

  4. Android 开发艺术探索——第十章 Android的消息机制

    Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机 ...

  5. Android开发入门与实战之Android应用安装卸载

    当一个Android开发者完整的开发完毕一个程序应用软件结束后要进行软件测试,这就是软件测试员的来历,那么在这之前,要进行Android开发应用的安装与卸载. Android开发入门与实战之Andro ...

  6. Android开发本地及网络Mp3音乐播放器之网络音乐下载功能实现

    实现功能: 实现网络音乐搜索功能 实现网络音乐下载功能 下载好的音乐目前不在播放器内,可以通过文件浏览器查看. 后续将博文,将实现歌词和下载音乐扫描功能. 实现效果如图: 实现代码如下: NetMus ...

  7. android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)

    [实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...

  8. 阿里P7面试官告诉你:3-5年以上的Android开发如何深入进阶?Android中高级开发必须掌握哪些?

    前言 Android确实不是当年盛况,已经不再像前几年前那么火爆.一个新行业如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点,然后再下降,最后再趋近一个平稳的值 ...

  9. 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...

    一.新建HelloWorld项目: 1.打开Eclipse,点击"File"->"New"->"Project"-Android ...

  10. Android开发面试经——2.常见Android基础笔试题

     标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报  分类: Android开发(29)  版 ...

最新文章

  1. setInterval和setTimeout的区别
  2. Android 优化电池使用时间——确定和检测网络状态
  3. 讲讲OC曲线是什么?
  4. 6 SystemVerilog语言编写售货机
  5. 数据库-表记录增删改
  6. 多记,多问为什么,最古老的学习方法怎么能丢?!
  7. 模糊逻辑基本原理与编程
  8. 如何设置点击listview的任何位置都可以选中checkbook
  9. NoSQLBooster for MongoDB软件使用
  10. 基金销售:基金转换与超级转换
  11. Webservice CXF 调用报错 Could not find conduit initiator for address:
  12. 瑞星:病毒伪装“交行安全控件”盗取用户敏感信息
  13. DM8168 Uboot使用EMAC1(TI源码使用默认的EMAC0)
  14. 动态规划算法之断句问题
  15. Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)
  16. 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构
  17. python调用r语言加载包错误_Python调用R语言
  18. HashMap灵魂26问
  19. DragonBoard 410c开发套件试用上手报告-搭建一个家庭智能管家的大脑
  20. 如何用计算机录麦克风的声音,电脑内部与麦克风的声音怎么同时录制?详细教程在此...

热门文章

  1. 数据库复习笔记-第1章绪论
  2. NETCore2.2/3.0+使用带有权限验证的Swagger
  3. 恐鬼症不显示服务器区域,《Phasmophobia》恐鬼症怎么证明鬼存在?鬼存在证明方法...
  4. 全新 Google Pixel Watch 重磅上线 | 着手为 Wear OS 构建应用!
  5. uniapp项目中引用iconfont图标,实现信号强度图标展示(离线使用)
  6. unity 关于如何调整Canvas画布的大小
  7. 数据流标准差计算方法-不用事先计算均值
  8. WDK10编译出最适合申请WHQL认证的驱动
  9. 介绍一下我大二开发的游戏:地下城冒险
  10. 坦克大战Java版(文末附下载地址)