android 二维码学习笔记

参考http://my.oschina.net/jeffzhao/blog/107658,但是他下载的是2.1版本的,我下载的是2.2版本的,有点出入,解决方法请看最下面。

项目需求,做一个类似微信扫描二维码,网页端登陆的功能实现。
利用开源项目ZXing来实现。ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。

ZXing主页:http://code.google.com/p/zxing/



1.Download
下载ZXing-2.1,解压后找到所需要的文件夹:core 和 android。core是核心库,android是在android平台下的二维码扫描实现源码

2.Build
在ZXing-2.1下面有不同平台实现方式的文件夹,每个下面都有一个名为build.xml的Ant编译文件。首先我们利用Ant工具和这个文件,将core编译成所需要的库。如果你没有Ant,可以去http://ant.apache.org下载(mac下默认已经安装)。编译很简单,直接cd到core目录,然后ant即可:

1 cd core
2 ant
3.import  

导入android工程,然后将编译好的core.lib 添加到工程中
我已经将我编译好的lib和Barcode Scanner 4.3.1工程放到github,可以直接下载运行

Barcode Scanner 4.3.1: https://github.com/jeffzhao/ZXing-Android

https://github.com/JeffreyZH/ZXingSimple

4.简化工程
Barcode Scanner 4.3.1的工程很丰满,如果单实现扫描二维码获取编码可以简化工程



我简化的工程demo ZXingSimple :https://github.com/jeffzhao/ZXingSimple 
去掉了本地数据库,分享,配置等功能,只保留了二维码扫描和生成功能。但还是建议看完整工程代码,很有帮助

5.扫描登入实现
扫描成功了,那么就先通知服务器端,扫描成功,页面也会即时展示出扫描成功,等待手机确认登录的信息
接下来,如果点确认登录,则通知服务器确认登录。

因此我们可能会有2个接口 
private final static StringSCANNED_URL ="http://192.168.111.109:8000/scanned?"; 
privatefinalstatic StringCONFIRMLOGIN_URL ="http://192.168.111.109:8000/confirmed?"; 
一个是通知服务器已经成功扫描的http接口,一个是通知服务器确认登录的接口。参数都是sessionID,也就是二维码带的信息,和用户token。

参考文章:
主流手机二维码PK——QR 与 DM :http://www.ancc.org.cn/news/article.aspx?id=3693
vCard 和 meCard 的区别:http://www.devicemedia.ca/blog/whats-the-difference-between-a-vcard-and-a-mecard/






按照上面这位兄弟的方法现在下载以后,没发现到core下面有build.xml文件,一开始想用他编译好的core.jar算了,但是导入后发现还是有问题,因为我下载的版本是2.2版的,后来在stackoverflow找到了解决方法,自己创建一个build.xml文件,内容如下

http://stackoverflow.com/questions/16857294/importing-zxing-missing-core-build-xml

<?xml version="1.0" encoding="utf-8" ?>
<project name="project" default="jar" basedir=".">

    <target name="compile" description="Compile source">
        <mkdir dir="bin" />
        <javac srcdir="src" includes="**" destdir="bin"/>
        <copy todir="bin">
            <fileset dir="src" />
        </copy>
    </target>

    <target name="jar" description="Package into JAR" depends="compile">
        <jar destfile="project.jar" basedir="bin" compress="true" />
    </target>
</project>
最终把project.jar导入,程序编译通过。


最终生成的apk是横屏的,下面参考stackoverflow上的方法修改成竖屏http://stackoverflow.com/questions/10216943/android-zxing-change-orientation-to-portrait

1、CameraConfigurationManager.java 的 setDesiredCameraParameters 方法,修改摄像头的方向,插入下面代码:

camera.setDisplayOrientation(90);

2、DecodeHandler.java 的 decode 方法,将取到的目标图片(横屏方向)转换为竖屏方向后再进行解码,插入代码如下:

    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
    	for (int x = 0; x < width; x++) {
    		rotatedData[x * height + height - y - 1] = data[x + y * width];
    	}
    }
    int tmp = width;
    width = height;
    height = tmp;
    data = rotatedData;

3、CameraManager.java 的 getFramingRectInPreview 方法,将原有的 frame 的计算方法 替换如下:

      rect.left = rect.left * cameraResolution.y / screenResolution.x;
      rect.right = rect.right * cameraResolution.y / screenResolution.x;
      rect.top = rect.top * cameraResolution.x / screenResolution.y;
      rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;

4、如果以上三步依然不行的话,那么在 CameraConfigurationManager.java 的 initFromCameraParameters 方法中,把一下代码注释:

//    if (width < height) {
//      Log.i(TAG, "Display reports portrait orientation; assuming this is incorrect");
//      int temp = width;
//      width = height;
//      height = temp;
//    }








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值