Android本地集成Zxing实现扫码功能

注明:参考自《简单粗暴 手把手教你 集成 zxing3.3.3》

Zxing集成过程的记录:

首先github下载3.3.3的zxing源码
Github地址:https://github.com/zxing/zxing/tree/zxing-3.3.3
如果嫌网速慢的话可以用这个:
https://download.csdn.net/download/qq_38356174/11099156

下载好之后先在项目中导入依赖:

//zxing
implementation 'com.google.zxing:core:3.3.3'

拷贝res资源文件
1)拷贝xml目录相关文件,当然原来项目已存在相关文件的,就需要拷贝代码。
2)拷贝values目录相关文件,当然原来项目已有的文件,请打开zxing对应的文件来拷贝代码,而不是覆盖文件!还有strings.xml要拷贝“values-zh-rCN”目录里面的,那个才是简体中文。
values目录
Android本地集成Zxing实现扫码功能_第1张图片
values-zh-rCN目录
Android本地集成Zxing实现扫码功能_第2张图片
3)拷贝raw目录相关文件,当然原来项目已存在相关文件的,就需要拷贝代码。。
4)拷贝menu目录相关文件,同上。
5)拷贝layout目录相关文件,因为只考虑竖屏,所以只拷贝layout相关文件就可以。
6)拷贝drawable目录和drawable-xxhdpi目录即可,其他可不考虑。
7)到此为止资源文件已拷贝完,我们Rebuild Project看下项目情况。然后发现报错了,哦!原来是在拷贝strings代码时多拷贝了一个app_name,导致与原来项目的app_name冲突,现在只要删除zxing拷贝过来的app_name就可以。
app_name重复问题
在这里插入图片描述
拷贝Java类文件
1)简单粗暴,直接把android/src/com目录下的google目录整个拷贝到自己项目对应的com目录下
Java类文件

自己项目的com目录
在这里插入图片描述

2)然后我们Rebuild Project一下,然后发现有一堆错误,但是,不要慌,这些都是简单的错误,一般都是目录不对,如R文件目录不对等问题。

Android本地集成Zxing实现扫码功能_第3张图片
报错

3)修复报错问题

Android本地集成Zxing实现扫码功能_第4张图片
首先是R文件目录问题,我们要全局修改,将zxing原来的R文件路径改成我们自己项目对应的路径就可以。快捷键是Ctrl + Shift + R。注意:之后重新Rebuild Project还会出现R文件不存在问题,是因为部分文件的import被自动删了导致全局替换不能替换到,所以现在我们就要拷贝上去就可以。

Android本地集成Zxing实现扫码功能_第5张图片

R文件报错

全局更改R文件路径

然后是CameraConfigurationUtils类不存在问题,这个文件在,zxing-zxing-3.3.3\android-core\src\main\java\com\google\zxing\client\android\camera目录里面。我们就拷贝到zxing的camera目录里吧,方便以后维护。
Android本地集成Zxing实现扫码功能_第6张图片
zxing的camera目录

接着就是AndroidManifest.xml里面的内容,我们对应的拷贝代码就可以。当我们拷贝完Activity后发现Activity的名称报红,不慌,其实是因为Activity的路径改了

Android本地集成Zxing实现扫码功能_第7张图片
权限部分的代码
Android本地集成Zxing实现扫码功能_第8张图片
Activity对应的代码
Android本地集成Zxing实现扫码功能_第9张图片
CaptureActivity包名路径
Android本地集成Zxing实现扫码功能_第10张图片
完整包名路径的Activity

4)更改启动页为CaptureActivity,这个不多说基础知识。

扫码功能已经实现,但是还需要多修改一步达到调用返回扫描结果的目的
CaptureActivity中在handleDecode方法中添加一下代码:

if (fromLiveScan) {
      historyManager.addHistoryItem(rawResult, resultHandler);
      // Then not from history, so beep/vibrate and we have an image to draw on
      beepManager.playBeepSoundAndVibrate();
      drawResultPoints(barcode, scaleFactor, rawResult);
	  //添加以下代码
      //返回扫描结果
      Intent result = new Intent();
      result.putExtra("ResultQRCode",rawResult.toString());
      setResult(RESULT_OK,result);
      finish();
    }

在你调用扫码的Activity中重写onActivityResult方法即可

//调用扫码的函数
private void scanQRCode() {
        Intent scanIntent = new Intent(this, CaptureActivity.class);
        scanIntent.setAction(Intents.Scan.ACTION);
        startActivityForResult(scanIntent, REQUEST_SCAN_QRCODE);
    }
//返回扫码的结果
 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_SCAN_QRCODE && resultCode == CaptureActivity.RESULT_OK) {
   			Toast.makeText(MainActivity.this,""+data.getExtras().getString("ResultQRCode"),Toast.LENGTH_SHORT).show();
        }
    }

至此直接可以扫码识别但问题还是存在,打开扫码界面是横屏的,改为横屏的操作请移步至
Android Zxing集成后竖屏不能扫条形码解决

你可能感兴趣的:(Android开发记录)