Android二维码功能实现,在程序内嵌入ZXing项目

Android二维码功能实现,在程序内嵌入ZXing项目最近二维码真是越来越火了 随便电视上 网络上 商场里 到处都是二维码 而内嵌二维码扫描功能的软件也越来越多 微信 UC 浏览器等等应用都可以对着二维码扫一扫 感觉我们自己的应用里不加上二维码扫描功能 都跟不上时代潮流了 所以今天我就将带着大家一起 在我们自己的程序里加入二维码扫描的功能 不过 二维码功能如果真要做起来还是非常复杂的 从零开始实现不太现实 比较好的做法就是借助现有的开源项目 目前在二维码这一领域名气最大的开源项目就是 ZXing 了 ZebraCrossin 它提供了多个平台的二维码扫

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/

最近二维码真是越来越火了,随便电视上、网络上、商场里,到处都是二维码。而内嵌二维码扫描功能的软件也越来越多,、微信、UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功能,都跟不上时代潮流了。所以今天我就将带着大家一起,在我们自己的程序里加入二维码扫描的功能。

不过,二维码功能如果真要做起来还是非常复杂的,从零开始实现不太现实,比较好的做法就是借助现有的开源项目。目前在二维码这一领域名气最大的开源项目就是ZXing了(Zebra Crossing),它提供了多个平台的二维码扫描解决方案,开源项目地址是 https://code.google.com/p/zxing/ 。

虽说网上已经有现成的开源项目了,不过关于ZXing的文档和教程好像还比较少,因此还是有不少朋友并不知道在项目中该如何引入ZXing的,这里我就带着大家一步步地实现,相信每个人在看完本篇文章后都可以在自己的项目中实现二维码扫描功能。

首先,我们需要下载ZXing项目所依赖的Jar包的源码。

下载地址是 http://repo1.maven.org/maven2/com/google/zxing/core/2.2/core-2.2-sources.jar 。

然后我们再来下载ZXing项目,下载地址是 https://zxing.googlecode.com/files/ZXing-2.2.zip 。

建议使用迅雷下载,因为Google Code和Maven的访问在国内不稳定,经常出现断联的情况,使用迅雷可以保证文件的完整性。

另外,经过我的测试,在ZXing项目中直接导入core-2.2的Jar包是无法正常运行的,所以我们只能通过将core-2.2的源码加入到ZXing项目中来实现。下载好以上两个文件后,先解压core-2.2-sources.jar文件,解压之后的目录结构如下图所示:

Android二维码功能实现,在程序内嵌入ZXing项目

然后解压ZXing-2.2这个压缩包,里面可以看到各种平台下的ZXing项目源码,我们进入到android文件夹的src目录下,将core-2.2-sources中的源码拷贝进来。拷贝之后android文件夹下的目录结构如下图所示:

Android二维码功能实现,在程序内嵌入ZXing项目

这样准备工作已经完成了,现在我们新建一个Android项目ScannerTest,项目使用Android 4.0的API。

然后将上图中src目录下的所有文件全部复制,粘贴到我们ScannerTest项目的src目录下,完成后目录结构如下图所示:

Android二维码功能实现,在程序内嵌入ZXing项目

拷贝完了代码,现在该拷贝资源了,展开ZXing项目android文件夹下的res目录,将drawable文件夹、layout文件夹、menu文件夹、raw文件夹、values文件夹以及xml文件夹中的内容都拷贝到ScannerTest项目的res目录下,注意有冲突的部分要小心解决,比如两个values文件夹中都有string.xml文件,要将它们的内容进行合并,不能只是简单地覆盖。

然后我们还需要将AndroidManifest中的内容进行合并,注意ZXing Android项目下的AndroidManifest在声明Activity时用的都是简写,而现在由于项目包名变了,再使用简写会出现找不到活动的情况,因此所有的简写都要改成完整类名,例如.CaptureActivity要改成com.google.zxing.client.android.CaptureActivity。另外ZXing Android项目下的主活动是CaptureActivity,这里我们需要将主活动的声明删除掉,因为ScannerTest项目中主活动是MainActivity。合并后的AndroidManifest中的代码如下所示:

 
   
   
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     
      
       
       
      
     
     
      
       
       
      
      
       
       
       
       
      
      
       
       
       
       
      
      
       
       
       
       
      
      
       
       
       
       
      
     
     
     
     
      
       
       
      
      
       
       
       
      
      
       
       
       
      
     
     
      
       
       
      
     
     
      
       
       
      
     
     
      
       
       
      
     
     
      
       
       
      
     
     
      
       
       
      
     
     
      
       
       
      
     
    
  

完成到这一步之后,你会发现项目中还是有很多的错误。不用担心,剩下的错误全部都是由于找不到R文件所造成的。这是因为ZXing项目中所引用的R文件都是com.google.zxing.client.android包下的R,而现在我们拷贝到ScannerTest项目之后,应该引用com.example.scannertest包下的R文件。我们需要将有错误的文件一个个地修改过来,虽然工作量不少,但都是傻瓜式操作,只要大家有耐心,就一定可以完成。

现在ScannerTest项目中应该已经没有任何错误了,然后我们还需要对ZXing的代码进行稍微的定制。

打开CaptureActivity,这个类就是用于扫描二维码的最主要的一个类,其中有一个handleDecode()方法,当二维码扫描完成之后会把结果回调到这个方法中,我们现在不想使用默认的处理方式,于是修改handleDecode()中的代码,如下所示:

public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) { String result = rawResult.getText(); if (!TextUtils.isEmpty(result)) { Intent intent = new Intent(); intent.putExtra("scan_result", rawResult.getText()); setResult(RESULT_OK, intent); } else { setResult(RESULT_CANCELED); } finish(); }

这里我们将扫描出来的结果借助Intent进行返回。

然后打开或新建activity_main.xml文件做为ScannerTest项目的主布局,在其中添加如下代码:

 
   
    
    
  

这个布局文件很简单,一个按钮用于开启二维码扫描功能,一个TextView用于显示扫描结果。

最后打开或新建MainActivity做为ScannerTest项目的主Activity,代码如下所示:

public class MainActivity extends Activity { public static final int SCAN_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.scan_button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CaptureActivity.class); startActivityForResult(intent, SCAN_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case SCAN_CODE: TextView scanResult = (TextView) findViewById(R.id.scan_result); if (resultCode == RESULT_OK) { String result = data.getStringExtra("scan_result"); scanResult.setText(result); } else if (resultCode == RESULT_CANCELED) { scanResult.setText("扫描出错"); } break; default: break; } } }

这个类也很简单,点击按钮时,我们通过startActivityForResult()方法启动CaptureActivity,开始执行二维码扫描,扫描的结果将回调到onActivityResult()方法中,然后在这个方法中取出扫描的结果,并展示在TextView上。

这样我们所有的编码工作就已经完成了,可以尝试运行一下了。首先看到程序的主界面如下图所示:

Android二维码功能实现,在程序内嵌入ZXing项目

点击扫一扫后可以进行二维码扫描,见下图:

Android二维码功能实现,在程序内嵌入ZXing项目

扫描完成后会将结果返回到主界面,如下图所示:

Android二维码功能实现,在程序内嵌入ZXing项目

不知道大家有没有成功呢?这里我精心给大家准备了一张二维码图片,看看有多少朋友能够成功扫出来。 ^_^

Android二维码功能实现,在程序内嵌入ZXing项目

好了,今天的讲解到此结束,有疑问的朋友请在下面留言。

源码下载,请点击这里


关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

微信扫一扫下方二维码即可关注:

Android二维码功能实现,在程序内嵌入ZXing项目         Android二维码功能实现,在程序内嵌入ZXing项目

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212275.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午8:24
下一篇 2026年3月18日 下午8:25


相关推荐

  • JS几种数组遍历方式总结

    JS几种数组遍历方式总结JS数组遍历的几种方式JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比第一种:普通for循环代码如下:for(j=0;j<arr.length;j++){}简要说明:最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间第二种:优化版for循环代码如下…

    2022年7月12日
    21
  • LBD算法 – Graph matching 图匹配算法分析

    LBD算法 – Graph matching 图匹配算法分析上一步我们进行了线特征的提取和描述 接下来我们进行线特征的匹配 在此之前我们先通过预处理将一些明显无法匹配的特征给消除 以降低图匹配问题的维度

    2026年3月16日
    2
  • 分子生物学词汇(L~O)

    分子生物学词汇(L~O)                lacoperon 乳糖操纵子                laccase 漆酶                lacmus 石蕊                lactalbumin 乳白蛋白,乳清蛋白                lactam 内酰胺                lactamase 内酰胺酶                la

    2022年7月11日
    50
  • Java反射技术详解

    Java反射技术详解前言相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了,java反射有个开源框架jOOR相信很多人都用过,不过我们还是要学习发射的基础语法,这样才能自己写出优秀的框架,当然这里所讲的反射技术,是学习Android插件化技术、Hook技术等必不可…

    2022年4月29日
    40
  • 2019.12.31 Day1练习题

    2019.12.31 Day1练习题寒假培训Day1

    2022年10月18日
    5
  • 密码学实验教程(科学实验课)

    实验吧密码学WriteUp一)

    2022年4月14日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号