Android 扫一扫功能实现(Zbar)


1.一本正经的简介:

如果你觉得快乐,你就扫一扫.
如果你觉得快乐,你就扫一扫.
如果你觉得快乐,你就扫一扫.
早上买豆浆油条可以扫一扫,中午吃湘菜可以扫一扫,街边卖水果的大妈支持扫一扫.
如果你现在还不知道什么是扫一扫,你就找块水豆腐了断吧.


2.准备工作:

1.实现扫一扫功能需要用到解码库,才能识别出二维码信息,
下面提供两个开源库地址:
ZBar:https://github.com/ZBar/ZBar
Zxing:https://github.com/zxing/zxing

2.熟悉Android自定义Camera相关知识


3.具体使用

然而,当我们打开上述的两个库后,可能发现并没什么卵用.
因为官方的两个库,里面包含的东西实在太多的,而我们仅仅需要Android中的小部分.
怎么办捏,不用担心,上面的链接其实只是我用来装逼的,这样才显得我的逼格高.
在我们之前已经有很多人为前辈做过扫一扫功能,所以分享了很多相应的jar包,SO文件,我们只要拿过来用就行了.

本文用的是Zbar实现扫一扫,因为根据本人对两个库的使用比较,发现Zbar解码比Zxing速度要快,实现方式也简单.

  • 效果图
    这里写图片描述

上面是打开百度地址的二维码,各位大佬可以下载源码运行看下效果.

  • 源码:

我是源码
点击下载伟大的Demo

  • 集成:

打开源码项目,找到里面的箭头扫一扫Module

这里写图片描述

进入大佬自己的Android studio项目,直接点击File->New->Import Module 选择Demo文件导入即可.
记得在Appgradle添加依赖. compile project(':zbarcode')

这里写图片描述


使用代码

进入扫一扫

Intent intent1 = new Intent(MainActivity.this, CaptureActivity.class);
        startActivityForResult(intent1, QR_CODE);

获取返回的结果


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == QR_CODE) {
            Bundle b=data.getExtras();
            String result = b.getString(CaptureActivity.EXTRA_STRING);
            Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show();
        }

注: 请根据大佬自己项目的需求,配置右边SO库架构,对应删掉左边多余的文件夹

这里写图片描述

源码分析

ZbarCode结构

这里写图片描述

CaptureActivity:为扫一扫界面的Activity;
AutoFocusManager:相机自动聚焦管理类
CameraConfigurationManager:相机参数信息的操作类
CameraManager:为自定义相机操作的封装,管理相机的打开,取景,参数,回收处理.
PreviewCallback:图像数据回调处理;
PreviewCallback:主线程Handler;
DecodeThread:解码子线程;
DecodeHandler:子线程Handler;
BeepManager:扫码操作滴的声音处理;

流程:

扫一扫大致流程如下序列图:

Created with Raphaël 2.1.0 CaptureActivity CaptureActivity SurfaceView SurfaceView CameraManager CameraManager Zbar库 Zbar库 出始化SurfaceView 初始化完毕 打开摄像头 判断是否可以开启 相机已开启 传递SurfaceHoler开起预览 开启预览 获取摄像头参数 开启自动聚焦 Callback回调图像数据 开启子线程 传递相机参数和相机图像数据 在子线程成解码 把解码状态还回 成功,得到结果 失败,重新回调图像数据,进行解码

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值