一、简介
现在APP的扫码功能很普遍,也有一些APP会有生成二维码的需求。目前Android大部分是集成了zxing这个开源项目的扫码功能。
开源项目地址: https://github.com/zxing/zxing
该项目功能很多,我们仅仅是用到里面Android的部分。早已有一些大神将核心的扫描等功能提取出来了。我们只需要集成到项目中使用即可。现在已经到3.3版本,修复了旧版本很多bug,有的bug甚至会导致APP奔溃!建议升级到新版本。
二、集成方法
DEMO地址:https://github.com/HappyMiao/QrCodeScan
QrCodeScan 这里已经集成好了一个Demo,只需按照以下步骤将此项目中的内容复制导入即可。
Demo默认界面:
打开了扫描界面,这个界面后面可以自己根据需求定制修改。
生成二维码
先下载上面的Demo
在项目的build.gradle中添加依赖 com.google.zxing:core:3.3.0
将整个包 com.google.zxing(包含路径)复制到自己的项目下
复制res下的资源文件
注意不要覆盖掉了自己项目里的内容。可以将内容复制到对应的文件里边。
- raw下的beep.ogg。音频文件CaptureActivity中使用,若不想用则可以自行修改CaptureActivity。
- value 下的attrs文件。
- value下的ids.xml文件。
- value下的string内容。
- value下的color内容。
- layout下的Activity_scanner 复制到你的layout下。
在清单文件里注册Activity、添加权限
<activity
android:name="com.google.zxing.activity.CaptureActivity"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"/>
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 震动权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 -->
<uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->
三、使用
生成二维码
Bitmap mBitmap = EncodingHandler.createQRCode("www.baidu.com", 300);//300表示宽高
扫描二维码调用
Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
扫描结果回调,重写方法onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { //RESULT_OK = -1
Bundle bundle = data.getExtras();
String scanResult = bundle.getString("result");
Toast.makeText(MainActivity.this, scanResult, Toast.LENGTH_LONG).show();
}
}
四、部分源码类介绍
-
CaptureActivity Zxing暴露出来进行调用的界面,在handleDecode方法中对扫码成功后的动作进行处理。
-
CameraManager getFramingRect()方法,定义了扫描的区域,可以自己修改。
-
ViewfinderView ZXing扫码窗口的绘制。 private void drawTextInfo(Canvas canvas, Rect frame) 修改文本绘制的位置 private void drawLaserScanner(Canvas canvas, Rect frame) 修改扫描线的样式。注意若使用paint.setShader(Shader shader) 方法,一定要在绘制完成后调用paint.setShader(null)。以免绘制信息出错。
-
CameraConfigurationManager 修改横竖屏、处理变形效果的核心类。
-
DecodeHandler.decode ZXing解码的核心类
-
CaptureActivityHandler,当DecodeHandler.decode完成解码后,系统会向CaptureActivityHandler发消息。如果编码成功则调用CaptureActivity.handleDecode方法对扫描到的结果进行分类处理。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/05/13 08:55