Android Studio可以用两种方法实现Zxing的导入,
第一种方法:直接implementation
在需要使用zxing进行二维码扫描的app的build.gradle直接添加依赖:
implementation 'com.journeyapps:zxing-android-embedded:2.3.0@aar'
implementation 'com.journeyapps:zxing-android-legacy:2.3.0@aar'
implementation 'com.journeyapps:zxing-android-integration:2.3.0@aar'
implementation 'com.google.zxing:core:3.2.0'
其实可以添加成com.google.zxing:core:x.x.x的形成,AS会自动搜索最新版本,帮助我们修改成最新版的
然后使用startActivityForResult的方法就可以启动了
Intent intent = new Intent(getApplicationContext(),CaptureActivity.class);
intent.setAction("com.google.zxing.client.android.SCAN");
intent.putExtra("SAVE_HISTORY", false);
startActivityForResult(intent, 0);
但是,这样启动的CaptureActivity界面是横屏的,也不能修改扫描界面,所以很难满足我们的需求。
第二种方法:添加外部依赖项目
1) 下载Zxing源码
下载地址见 https://github.com/zxing/zxing/ 这是一个Google官方维护的项目,支持很多语言和多种使用环境,我们只需要下载android相关的就可以,
2) 导入外部依赖项目
在project视图下,右键项目名, 选择New>Module>Import Gradle Project.然后选择下载的android文件夹。注意,此时可以给导入的外部项目修改名字,可能是官方考虑到要导入多个项目时避免名字冲突吧,我改成zxing了。
3) 添加core库
这里其实有两种方法,一是可以直接下载core-x.x.x.jar (),在外部项目中新建Libs文件夹,拷贝进去,然后add as a dependency,但是这样的很容易出错,推荐第二种
二是可以在导入的android外部项目的build,gradle中添加外部依赖 compile ‘com.google.zxing:core:x.x.x’
4) 修改外部导入项目的属性
将 ‘com.android.application’ 改成: ‘com.android.library’ 告诉系统这个是library.
删掉 applicationId 声明.
将SdkVersion和buildToolVersion修改成跟当前app一致
5) 修改导入项目的manifest.xml,
将 <application…中,删去 android:icon… 、android:logo…
删去category android:name=“android.intent.category.LAUNCHER”
6) 添加对导入项目的依赖
在app下面的build.gradle文件中的依赖中添加
implementation project(’:zxing’)
告诉系统要一起编译这个外部项目
3 添加外部项目时的常见错误
1、 常量表达式错误
在修改完build文件后,报了一个常量表达式错误的问题,发现是在各个switch语句那里,Alt+Enter 将switch case 语句改为 if else.
原因:避免多个库之间出现资源冲突 (具体可以去查阅)
2、找不到合适的匹配器
错误:对于ArrayAdapter(Context, int, ArrayList),找不到合适的构造器
看报错的最后一行,说ArrayList 无法转换成List
这是因为 文件中ArrayList<>没有指定变量类型,改为ArrayList 即可
3、找不到getStartTimeStamp(),改成getStart().getTime()即可,后者是long类型,对于getEnd()也一样
最后,改成竖屏
在manifest里修改(CaptureActivity就是要调用的类),sensorPortrait即可