一、简介
现在APP的扫码功能很普遍,也有一些APP会有生成二维码的需求。目前Android大部分是集成了zxing这个开源项目的扫码功能。
-
该项目功能很多,我们仅仅是用到里面Android的部分。早已有一些大神将核心的扫描等功能提取出来了。我们只需要集成到项目中使用即可。
现在已经到3.3版本,修复了旧版本很多bug,有的bug甚至会导致APP奔溃!建议升级到新版本。
二、集成方法
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方法对扫描到的结果进行分类处理。
如有不对的地方,欢迎大神指正。