美文网首页Android AndroidHotAndroid
一扫天下——ZXing使用全解析

一扫天下——ZXing使用全解析

作者: eclipse_xu | 来源:发表于2015-11-09 22:17 被阅读64302次

    一扫天下——ZXing使用全解析

    二维码现在已经烂App了,不管什么App,没有二维码就好像低人一等了。所以,在自己的项目中集成二维码功能还是非常有必要的。

    网上很多都是基于ZXing2.3的,但是现在都3.1了,改了很多bug,也进行了很多优化,最好按本文弄一下。

    参拜ZXing

    ZXing的github地址:
    https://github.com/zxing/zxing

    通过git clone git@github.com:zxing/zxing.git 命令我们可以把整个ZXing项目拉取下来。

    这里写图片描述

    然而这并没有什么卵用。

    因为ZXing的项目是非常庞大的,功能也非常多,但是我们不需要这么多,我们只关心Android部分的。

    获得ZXing的祝福之jar

    在使用ZXing之前,我们需要先编译它的jar包,我们可以看见源代码目录中有一个core的目录,我们可以把这个文件夹导入eclipse作为一个java工程。最后通过export导出一个jar包。

    获得ZXing核心功能

    我们需要把核心的扫码、解码功能抽取出来,这一步,网上已经有很多人做过了,只是大部分都是基于第一个抽ZXing的人,而那个是基于ZXing1.5、2.3的,所以,记得要进行Update哦。

    那么我们如何获得最新的ZXing代码呢,很简单,找一个旧的,然后把最新的代码一个个copy过去替换就好了,当然,还是会有一些问题,不过一步步解决就可以了,都不是很大的问题。

    饭来张口

    这里为大家也提供一个封装好的最新的ZXing Lib:

    https://github.com/xuyisheng/ZXingLib

    基于ZXing3.1封装,包含了最新的jar包和代码。

    解析

    CaptureActivity

    ZXing暴露的调用Activity。在handleDecode方法中对扫码成功后的动作作处理。

    ViewfinderView

    ZXing扫码窗口的绘制,原始的ZXing使用这种方式去绘制,在上面提供的开源库中,作者将扫描框的绘制直接抽取到了XML文件中,这样修改起来更加方便了。

    CameraConfigurationManager

    修改横竖屏、处理变形效果的核心类。

    在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(读取配置设置相机的对焦模式、闪光灯模式等等),可以将扫描改为竖屏:

    即:
    在方法最后加上:

    /** 设置相机预览为竖屏 */
    camera.setDisplayOrientation(90);
    

    即可。

    在public void initFromCameraParameters(Camera camera)方法中(计算了屏幕分辨率和当前最适合的相机像素),我们可以对修改为竖屏扫码后,由于像素信息点没有对调造成图像扭曲变形进行修改。

    即:

    在Log.d(TAG, "Screen resolution: " + screenResolution);后加上如下的代码:

    /** 因为换成了竖屏显示,所以不替换屏幕宽高得出的预览图是变形的 */
    Point screenResolutionForCamera = new Point();
    screenResolutionForCamera.x = screenResolution.x;
    screenResolutionForCamera.y = screenResolution.y;
    
    if (screenResolution.x < screenResolution.y) {
        screenResolutionForCamera.x = screenResolution.y;
        screenResolutionForCamera.y = screenResolution.x;
    }
    

    最后,将screenResolution替换为screenResolutionForCamera:

    cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
    
    

    DecodeHandler.decode

    ZXing解码的核心类

    CaptureActivityHandler

    当DecodeHandler.decode完成解码后,系统会向CaptureActivityHandler发消息。如果编码成功则调用CaptureActivity.handleDecode方法对扫描到的结果进行分类处理。

    最后

    本文的Github中已经包含了前面所提到的所有修改(横竖屏、扭曲变形),用最新的ZXing代码进行了update,同时提供了编码、解码方法,并且将扫码界面抽取成XML(感谢开源作者),方便拓展。

    https://github.com/xuyisheng/ZXingLib
    https://github.com/xuyisheng/ZXingLib
    https://github.com/xuyisheng/ZXingLib

    重要的东西发三遍。

    以上。

    相关文章

      网友评论

      • 喜洋洋9378:现在最新版本是3.3.3了
      • IOS_Wek:能扫描颜色比较淡的二维码吗
      • 王震阳:一维码识别速度还可以,二维码识别速度很差,甚至识别不出来。而同样的二维码使用微信基本可以马上识别出来。
        梁延桥:嗯,非常慢
      • 1024工场:扫描后反应太慢。。很难扫出来。。
      • 小默森:大神为什么sdk要求这么高啊?
      • 阿木Robert:喜欢这个风格
      • 7755a135870e:反应速度太慢,有的还识别不出来
      • 石榴的咩唁:感觉并没写出什么来
      • b2a890dfdd03:AndroidStudio打包的时候会出现Multiple dex files define Lcom/google/zxing/BarcodeFormat这个错误何解?
      • yzytmac:你把intents类搞没了很多功能用不了 啊 ,比如自定义扫描框的宽高,生成二维码这些都用不了啊
      • ff16b8978d2f:扫描了后没反映呀
      • ff16b8978d2f:扫描了后没反映呀
      • ff16b8978d2f:扫描了后没反映呀
      • ff16b8978d2f:扫描了后没反映呀
      • 0c28ba0c531d:出现Camera Error!
        ifu25:@MPhone 申请摄像头权限即可(android6.0以上需要在代码中获取)
      • 一抹火焰:谢谢!正需要
      • 空心菜的爱:祝福之jar,,
        喜欢这风格

      本文标题:一扫天下——ZXing使用全解析

      本文链接:https://www.haomeiwen.com/subject/fxhhhttx.html