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

首先声明,本笔记是在下面这位大佬的代码基础上改的,本人会将实现过程中出现的问题和经验写在下面,本笔记可以结合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里面,具体如下图:

Android Gradle Plugin Version
Gradle Version
解决完这个后,会报 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项目的程序员前辈,希望我写的这些东西可以帮助同样有需要的人。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值