Android开发扫一扫功能,Android使用ZXing实现扫码功能
最近正在开发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实现扫码功能相关推荐
- Android开发— 2016_最流行的Android组件、工具、框架大全(二)
2019独角兽企业重金招聘Python工程师标准>>> 泡在网上的日子 首页 代码 话题 问答 标签 关于 登录注册 首页 › 安卓开发 › android开发 Android开发- ...
- Android开发-AMD平台如何使用Android studio自带模拟器
Android开发-AMD平台如何使用Android studio自带模拟器 前言 AMD开启虚拟化VT win10专业版开启 win10家庭版开启 创建Android模拟器 前言 现在Android ...
- Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈android
转载:http://www.android100.org/html/201507/15/165084.html Android开发经验谈-很少有人会告诉你的Android开发基本常识,经验谈andro ...
- Android 开发艺术探索——第十章 Android的消息机制
Android 开发艺术探索--第十章 Android的消息机制读书笔记 Handler并不是专门用于更新UI的,只是常被用来更新UI 概述 Android的消息机制主要值得就是Handler的运行机 ...
- Android开发入门与实战之Android应用安装卸载
当一个Android开发者完整的开发完毕一个程序应用软件结束后要进行软件测试,这就是软件测试员的来历,那么在这之前,要进行Android开发应用的安装与卸载. Android开发入门与实战之Andro ...
- Android开发本地及网络Mp3音乐播放器之网络音乐下载功能实现
实现功能: 实现网络音乐搜索功能 实现网络音乐下载功能 下载好的音乐目前不在播放器内,可以通过文件浏览器查看. 后续将博文,将实现歌词和下载音乐扫描功能. 实现效果如图: 实现代码如下: NetMus ...
- android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)
[实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...
- 阿里P7面试官告诉你:3-5年以上的Android开发如何深入进阶?Android中高级开发必须掌握哪些?
前言 Android确实不是当年盛况,已经不再像前几年前那么火爆.一个新行业如果经历过盛极一时,那么必然有这样的一条曲线,像我们学的正弦曲线先急速上升,然后到达顶点,然后再下降,最后再趋近一个平稳的值 ...
- 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...
一.新建HelloWorld项目: 1.打开Eclipse,点击"File"->"New"->"Project"-Android ...
- Android开发面试经——2.常见Android基础笔试题
标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报 分类: Android开发(29) 版 ...
最新文章
- setInterval和setTimeout的区别
- Android 优化电池使用时间——确定和检测网络状态
- 讲讲OC曲线是什么?
- 6 SystemVerilog语言编写售货机
- 数据库-表记录增删改
- 多记,多问为什么,最古老的学习方法怎么能丢?!
- 模糊逻辑基本原理与编程
- 如何设置点击listview的任何位置都可以选中checkbook
- NoSQLBooster for MongoDB软件使用
- 基金销售:基金转换与超级转换
- Webservice CXF 调用报错 Could not find conduit initiator for address:
- 瑞星:病毒伪装“交行安全控件”盗取用户敏感信息
- DM8168 Uboot使用EMAC1(TI源码使用默认的EMAC0)
- 动态规划算法之断句问题
- Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)
- 拓扑容差如何修改_如何在CAD中通过设置容差参数对多段线进行自动修复重构
- python调用r语言加载包错误_Python调用R语言
- HashMap灵魂26问
- DragonBoard 410c开发套件试用上手报告-搭建一个家庭智能管家的大脑
- 如何用计算机录麦克风的声音,电脑内部与麦克风的声音怎么同时录制?详细教程在此...
热门文章
- 数据库复习笔记-第1章绪论
- NETCore2.2/3.0+使用带有权限验证的Swagger
- 恐鬼症不显示服务器区域,《Phasmophobia》恐鬼症怎么证明鬼存在?鬼存在证明方法...
- 全新 Google Pixel Watch 重磅上线 | 着手为 Wear OS 构建应用!
- uniapp项目中引用iconfont图标,实现信号强度图标展示(离线使用)
- unity 关于如何调整Canvas画布的大小
- 数据流标准差计算方法-不用事先计算均值
- WDK10编译出最适合申请WHQL认证的驱动
- 介绍一下我大二开发的游戏:地下城冒险
- 坦克大战Java版(文末附下载地址)