条码扫描二维码扫描——ZXing android 源码简化
前言
最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个以Apache License 2.0?开源的?ZXing项目。Zxing项目里的Android实现太过复杂多余东西太多,得对其进行简化。
前提条件下载源代码:点击这里
编译核心库:Zxing的主页上有介绍具体步骤,大家也可以参照这篇博文:android 条码识别软件开发全解析(续2详解绝杀!)
导入项目打开Eclipse 导入 源码中的 Android 项目,然后右击项目 选择“Build path”——》"Add External Archives" 把核心库 core.jar文件加入到项目中。
此时编译一下项目,会发现报错,“?Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?”之类的。打开raw 下的Values 发现错误是在一个<String>上。这里把 “preferences_custom_product_search_summary” 里的 ?%s ?%f ?全部都改成 ?%1$s ?%1$f(因为我们用不到多国语言,建议只保留默认的Value ,其他全部删除)。
原因:由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明如何去设置 %s 等符号
“If you need to format your strings using String.format(String, Object...) , then you can do so by putting your format arguments in the string resource. For example, with the following resource:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguements from your application...“
经过以上步骤后项目应该就可以运行了。
但是ZXing的android项目东西太多了,有很多是我们不需要的,得新建另一个项目简化它。
简化在开始前大致介绍一下简化ZXing需要用到各个包 、类的职责。
CaptureActivity。这个是启动Activity 也就是扫描器(如果是第一安装,它还会跳转到帮助界面)。CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。DecodeThread 解码的线程。com.google.zxing.client.android.camera 包,摄像头控制包。ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。新建另一个项目新建另一个项目将启动的Activity命名为CaptureActivity,并导入核心库。项目新建完成后我们打开 CaptureActivity 的布局文件,我这里为main。把里面的XML修改为:
在修改的过程中,有很多是关于R 资源的问题,在此我们需要将Values ?里面的两个xml资源文件拷入项目中:colos.xml 和ids.xml 。 ctrl+b 一下看看error 是不是少了很多。在CameraManager中有些地方需要用到项目的配置,这里需要把配置直接写入代码中:
简化后的ZXing 更加方便我们了解ZXing项目 是如何解码的。只要仔细查看源码,进行单点跟踪调试,相信大家很容易能理解。
顾客是上帝?? 很多人留言要源码, 其实我这不是什么源码,我只是把ZXing的东西简化了一下而已。事实上我也不喜欢直接放源码项目,这样大家就不想读ZXing的源码了。
下面是我简化的版本:Zxing简化
<script type="text/javascript"></script>
分类: Android 标签: android, 条码扫描, 二维码扫描, ZXing 2 楼 wanghonghui023 2011-10-22 借用了楼主的代码和核心包,放在自己项目里了,不知道楼主介意不? 3 楼 surfing1982 2011-10-26 好人啦,非常感谢。。。。 4 楼 zhenglimeng1983 2011-11-01 非常感谢楼主细心的讲解,真是不错啊,非常感谢 5 楼 liaozxbj 2011-11-18 在模拟器里能运行么?我怎么运行不成功啊 6 楼 陈文景 2011-12-05 liaozxbj 写道在模拟器里能运行么?我怎么运行不成功啊模拟器没法模拟摄像头 7 楼 liveths 2011-12-06 楼主是强人,并且是一个好心肠的强人,这个二维码搞了我好几天了,遇到楼主这个好东东就立马解决了,大感谢啊。 8 楼 cfm1989 2011-12-10 解析UTF-8的二维码会乱码啊。。
像这个生成的二维码解析不了http://www.qrcn.net/index.php/action-channel-name-qrcode
我查查,快拍二维码就可以解析~我快哭了 9 楼 ihopethatwell 2011-12-15 楼主,运行的时候扫描中间出现了一道红线,不知道怎么去掉[img][/img] 10 楼 zhoujiamail 2011-12-15 谢谢,研究下 11 楼 suiyuan17 2012-02-28 楼主,运行不起来啊,可不可以给我发到邮箱里啊,谢谢哦 12 楼 wuhanliupeng 2012-02-28 我想模仿一下微信那样的布局实现。 结果失败了的。 不知道怎么弄, 就是把你这个给反过来 正着显示。 我的QQ 79144876 13 楼 suiyuan17 2012-02-28 11 楼 suiyuan17 2 小时前 引用
楼主,运行不起来啊,可不可以给我发到邮箱里啊,谢谢哦
我邮箱601966049@qq.com 14 楼 幸运降临阿根 2012-03-16 楼主,怎么jar包呀。。能不能共享下,能的话,给我发邮箱ligen_1007@sina.com 谢谢 15 楼 hexiaoxiao_love 2012-03-17 楼主真是好人啊,可是。。。我没有core.jar这个jar包,hexiaoxiao_love@163.com求好心人发一份。。。拜谢! 16 楼 newbeehi 2012-03-22 扫描出来中文有乱码问题,楼主遇到过吗? 17 楼 meiyulaishi428 2012-03-23 楼主,请问你的代码是采用的哪版API?我在新建工程的时候选create from existing source,选择下载下来的代码,会出现错误,[2012-03-23 14:47:02 - CaptureActivity] AndroidManifest.xml file missing!。 18 楼 meiyulaishi428 2012-03-26 核心库hexiaoxiao_love 写道楼主真是好人啊,可是。。。我没有core.jar这个jar包,hexiaoxiao_love@163.com求好心人发一份。。。拜谢!
楼言主,core.jar这个包没有呀,发一份给我吧。285620308@qq.com 19 楼 李晓进 2012-07-06 安装后之后点了扫描之后解码不出信息来呀????????O(∩_∩)O哈哈~
