首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合github上作者的readme一起看:

https://github.com/bingoogolapple/BGAQRCode-Android

上述项目可以实现二维码和条形码的扫描,以及扫描界面的定制,经过个人实验,二维码的部分全部可以实现,条形码的部分个人没有实验过,没有发言权。

项目结构

该项目使用两种库同时实现了二维码和条形码的扫描,分别是ZXing和ZBar,本人只实验了ZXing,所有后面所述全部关于ZXing。

ZXing包括两个文件夹,分别是zxingzxingdemo,其中zxing是扫描二维码所用的库,而zxingdemo则是界面文件,所以如果想做修改,只需要在zxingdemo里进行修改即可。

zxingdemo里包括4个文件,与之对应的layout文件分别为:

  • MainActivity.java —— activity_main.xml :主界面,包括两个按键的点击事件,以及相机闪光灯权限的申请
  • RotateTest.java:这个文件我没用上,不知道是干什么的
  • TestGeneratectivity.java —— activity_test_generate.xml:生成二维码的界面,里面有各类生成二维码的函数
  • TestScanActivity.java ——activity_test_scan:二维码扫描界面,该项目重头戏!!该项目是使用自定义的ZXingView组件来实现二维码扫描框的。该组件可以对扫描框进行各种各样的设置,包括框大小、颜色等等。同时使用BGAFlowLayout组件来实现人机交互,可以在该组件上放置各种元件,并在TestScanActivity.java文件里设置对应的点击事件。包括对扫描结果的处理,也是在这个文件内完成的,在这个文件里有一个onScanQRCodeSuccess函数,只要把想要扫描后的反应写在这里即可。

以上为项目的zxing部分的整体结构,经过本人实验可以运行,不过在github上的工程移到自己电脑里难免需要一些修改,修改如下:

项目本地化修改

在本地化途中,如果Android studio版本不够高,是打不开工程的,我用的版本是Android Studio Arctic Fox | 2020.3.1 Patch 3,这个版本是可行的。

然后会出现这个错误 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException ,网上有人说要使用jdk 8(也就是1.8?),不过我已经是1.8了;其次有人说gradle需要7.0.2版本(error:Unable to load class ‘javax.xml.bind.JAXBException‘.),这个在File→Project Structure→Project里面可以更改,说实话那里面有Android Gradle Plugin Version和Gradle Version两项,我也分不清有啥区别,反正我两个都改了,在修改的途中Android studio需要自动下载些东西,需要一些时间。我用的版本分别是7.0.3和7.0.2。这两样东西在文件里的位置分别在build.gradle和gradle→wrapper→gradle-wrapper.properties里面,具体如下图:



解决完这个后,会报 apply plugin: ‘com.github.dcendents.android-maven’ 这个错误,我看网上说是因为不同的gradle版本需要不同marven-gradle-plugin版本(这个marven-gradle-plugin就是上面图1里被我注释掉的那个包),在网上查了一大堆资料,也没能解决问题,想要找到对应的版本也没有找到,替换了其他版本又说找不到包,最后索性把引用包的那句话注释掉了(见图1)。

不过这样做会又会引起新的bug,类似于org.gradle.api.publication.maven.internal.MavenPomMetaInfoProvider,解决这个问题的方法是删除这样一句话apply plugin: ‘com.github.dcendents.android-maven’(详见无法加载类“org.gradle.api.publication.maven.internal.MavenPomMetaInfoProvider”
),这句话出现在qrcodecore→build.gradle、zbar→build.gradle和zxing→build.gradle三个文件的开头位置。不过这么删除在上传项目时也许又会出问题,管它呢,反正本地跑没问题。

上述问题都解决之后,就可以运行文件了,不管是在虚拟机还是实机上都可以(本人是Android 9手机,所以只保证Android 9可以运行)

个人感受

Android 的拓展性真的太强了,各种包来回引用,对于不太会java的人来说真的很折磨,本人作为几乎0基础的人来做这个真的花了很多时间。

一开始使用的是这个项目yipianfengye/android-zxingLibrary,不过这个项目是16年的项目,对于Android 9来说有些过时了,而且这个工程里二维码扫描部分是封在jar里的,看着很不方便。

在运行项目的过程中,闪光灯可谓一个大问题,我一开始使用的那个项目里的闪光灯代码失效了。然后我就去各种找资料,说什么需要权限;Android 5.0之后android.hardware.Camera就失效了(然而并没有,新项目里还是使用了这个);还有人说Android 7.0之后需要使用SurfaceHolder.Callback 接口和SurfaceVIew才能让闪光灯亮(android 7.0 打开闪光灯失效原因,经过看代码,新项目里的确使用了public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback 不过具体干啥的,我也看不懂)。搞的人头大,幸好最后在新项目里都实现了。

结语

不管怎么说,都感谢两位上传github项目的程序员前辈,希望我写的这些东西可以帮助同样有需要的人。

Android 9 实现二维码扫描处理(BGAQRCode-Android) 笔记相关推荐

  1. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  2. [转载]android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) 前天早上登陆CSDN时候一条消息:一网友提出了两点疑惑 扫描框目前只是做的假象,是全屏的图片进行解析 中文乱码现象 ...

  3. Android 集成zxing二维码扫描、自定义

    项目主要有zxing的基本使用,包含扫描回调.连续扫描.自定义扫描框: 一.依赖库 implementation 'com.journeyapps:zxing-android-embedded:4.3 ...

  4. Android 基于Zxing二维码扫描的光速实现

    Android 十分钟光速实现二维码扫描 前言 在项目中要使用到二维码的相关内容,我们第一时间想到的是使用大名鼎鼎的zxing或者ZBar开源框架: github-zxing官方库的地址 github ...

  5. Android 应用之二维码扫描登录

    下面介绍二维码扫描登录原理, 首先需要web服务端,和app客户端. web服务端主要工作是生成二维码,检测客户端提交信息正确性,更新网页界面. app客户端主要工作是扫描二维码,提交账户信息(此不是 ...

  6. Android实现一维二维码扫描生成功能(一)-zxing导入现有项目

    前言 目前二维码扫描功能很流行也非常成熟了,而zxing项目也是目前可以说是最流行的二维码扫描方面的开源项目了,很多大神都对zxing进行了封装,github上也有很多好用的二维码开源库,但是我更喜欢 ...

  7. Android快速实现二维码扫描--Zxing

    Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...

  8. android中Zing二维码扫描,二维码生成

    Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...

  9. 【Android】条形码/二维码扫描——ZXing源码分析及相关jar包导入

    转载自:http://blog.csdn.net/u010574567/article/details/51916604 *********************1.源码分析************ ...

最新文章

  1. ggplot2可视化分面图(faceting)使用label_wrap_gen函数设置每个分面图的子图标题自动换行为多行文本(基于设定的当行宽度进行标题文本自动换行)
  2. 数组排序c语言函数_C语言如何写出返回数组最大最小值之差的函数(C primer plus 10-5)...
  3. ssas 数据源mysql_BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备...
  4. 如何以可视化方式显示 Angular 应用构建后的 bundle 文件大小
  5. NGINX Plus集成fail2ban进行动态IP黑名单配置
  6. WPF纯手工两步打造图片切割工具(二)
  7. Airflow 中文文档:常见问题
  8. oracle左连接查询代码,ORACLE连接查询,内外连接
  9. Ember -Routes
  10. 领峰:普通人如何炒白银技巧和方法有哪些
  11. 大型三维GIS图形工作站
  12. 安装小企鹅游戏(企5)
  13. Win 7 Office 2007,打开word出错
  14. 苹果手机卡死黑屏了不能开机怎么处理
  15. 在日本转职需要到入管办理转职手续
  16. win32 python查找文字指定格式 win32com 定位word开始结束 相当于发送快捷键
  17. Google Maps基站定位
  18. 关于重装系统后没有以太网和wifi的问题解决
  19. AC/DC电源的设计原理
  20. python三大,Python三大器

热门文章

  1. 教育类自媒体如何运营?自媒体营销的优势主要有哪些方面?
  2. 转载:汉字转拼音_gb2312 C#
  3. 一位面试官的真情剖白
  4. 图像中圆形识别及基于特征提取形状的matlab实现
  5. 雷鸟将邮件自动接收到新建的文件夹中
  6. Gradle 命令行介紹和安裝教程
  7. 【ACWing】665. 倍数
  8. PCB厂甩铜常见的原因分析
  9. 导出GMS计算结果,并进行分类汇总
  10. surfer 8 scripter 学习笔记(1)脚本对象模型