广告
返回顶部
首页 > 资讯 > 移动开发 >Android 二维码 生成和识别二维码 附源码下载
  • 337
分享到

Android 二维码 生成和识别二维码 附源码下载

源码下载二维二维码源码Android 2022-06-06 08:06:37 337人浏览 八月长安
摘要

  今天讲一下目前移动领域很常用的技术——二维码。现在大街小巷、各大网站都有二维码的踪迹,不管是iOS、Android、WP都有相关支持的软件。之前我就想了解二维码是如何工作,

  今天讲一下目前移动领域很常用的技术——二维码。现在大街小巷、各大网站都有二维码的踪迹,不管是iOSAndroid、WP都有相关支持的软件。之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解。今天主要是讲解如何使用ZXing库,生成和识别二维码。这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码

1、ZXing库介绍

  这里简单介绍一下ZXing库。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39码、93码。ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持jsR-234规范(自动对焦)的手机才能发挥其威力。
  下面是ZXing的demo运行,我这里创建了一个二维码,大伙可以用微信的扫一扫功能,试一下。就可以直接打开下面的网址。 

http://huoche.7234.cn/images/jb51/2wdpyinqr44.jpg

2、ZXing库主要类

  下面给大家介绍一下,ZXing库里面主要的类以及这些类的作用:

  CaptuReactivity。这个是启动Activity 也就是扫描器。
  CaptureActivityHandler 解码处理类,负责调用另外的线程进行解码。
  DecodeThread 解码的线程。
  com.Google.zxing.client.android.camera 包,摄像头控制包。
  ViewfinderView 自定义的View,就是我们看见的拍摄时中间的框框了。

3、使用ZXing生成二维码

  下面针对二维码生成和解析做个简单介绍,至于详细的使用方法,建议大家还是自己看看源码,使用起来很简单,不过这个开源项目的代码,值得好好看看。首先给出二维码生成的方法:


//要转换的地址或字符串,可以是中文
public void createQRImage(String url)
{
 try
 {
 //判断URL合法性
 if (url == null || "".equals(url) || url.length() < 1)
 {
  return;
 }
 Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
 hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
 //图像数据转换,使用了矩阵转换
 BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFORMat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
 int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
 //下面这里按照二维码的算法,逐个生成二维码的图片,
 //两个for循环是图片横列扫描的结果
 for (int y = 0; y < QR_HEIGHT; y++)
 {
  for (int x = 0; x < QR_WIDTH; x++)
  {
  if (bitMatrix.get(x, y))
  {
   pixels[y * QR_WIDTH + x] = 0xff000000;
  }
  else
  {
   pixels[y * QR_WIDTH + x] = 0xffffffff;
  }
  }
 }
 //生成二维码图片的格式,使用ARGB_8888
 Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
 bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
 //显示到一个ImageView上面
 sweepIV.setImageBitmap(bitmap);
 }
 catch (WriterException e)
 {
 e.printStackTrace();
 }
}

  上面就是二维码生成的方法接口,如果你只是使用者方法,很简单,只要传入一个URL即可,就像我截图里面一样,传入一个合法的网址即可。或者像现在一些移动APP的推广,把APP下载地址转为二维码,只要扫一下就可以下载相应的APP。这个也是目前比较流行的APP的推广方式。

  上面代码做的事情不多,主要是调用ZXing库里面QRCodeWriter().encode的方法对我们传进去的URL进行编码,具体如何编码,这个我这里就不详细说,有兴趣可以看ZXing的源码。文章最后会给出ZXing的源码和例子代码。

4、扫描二维码获取信息

  扫描获取二维码信息的工作稍微复杂一些,主要是需要编写Camera的使用,这个跟我们一般使用Camera一样,需要使用Surfaceview作为预览,这一部我这里就不说了,这个应该不是太复杂。对于使用过Camera做预览的朋友,应该是挺简单的事情。获取二维码数据的关键处理是在Camera的自动对焦回调函数哪里,调用ZXing的解码接口。


private void restartPreviewAndDecode() {
 if (state == State.SUCCESS) {
 state = State.PREVIEW;
 CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode);
 CameraManager.get().requestAutoFocus(this, R.id.auto_focus);
 activity.drawViewfinder();
 }
}

  这里稍微多说一句,由于解码需要一定时间,所以ZXing的解码调用,都是使用了Handler作为线程通信机制,解码的工作都是放在独立线程里面使用的,如果你直接在主线程解码,恐怕ANR问题是避免不了。


public void handleMessage(Message message) {
 switch (message.what) {
 case R.id.auto_focus:
 //Log.d(TAG, "Got auto-focus message");
 // When one auto focus pass finishes, start another. This is the closest thing to
 // continuous AF. It does seem to hunt a bit, but I'm not sure what else to do.
 if (state == State.PREVIEW) {
  CameraManager.get().requestAutoFocus(this, R.id.auto_focus);
 }
 break;
 case R.id.restart_preview:
 Log.d(TAG, "Got restart preview message");
 restartPreviewAndDecode();
 break;
 case R.id.decode_succeeded:
    //解码成功,获取到界面的结果和原来的二维码数据
 Log.d(TAG, "Got decode succeeded message");
 state = State.SUCCESS;
 Bundle bundle = message.getData();
 Bitmap barcode = bundle == null ? null :
  (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP);
 activity.handleDecode((Result) message.obj, barcode);
 break;
 case R.id.decode_failed:
 // We're decoding as fast as possible, so when one decode fails, start another.
 state = State.PREVIEW;
 CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode);
 break;
 case R.id.return_scan_result:
 Log.d(TAG, "Got return scan result message");
 activity.setResult(Activity.RESULT_OK, (Intent) message.obj);
 activity.finish();
 break;
 case R.id.launch_product_query:
 Log.d(TAG, "Got product query message");
 String url = (String) message.obj;
 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
 activity.startActivity(intent);
 break;
 }
}

  上面是解码的线程处理不同状态的时候需要注意的地方,我们这里只看获取图像成功的地方,成功获取图片解码的实在DecodeThread里面实现,DecodeThread里面解码成功后,会把数据序列化,然后保存到Bundle里面,我们可以直接通过Bundle的序列化,获取到图片数据。同时会把解码后的结果保存到MSG里面,然后就可以根据实际情况进行处理,例如上面代码,解码成功后,会调用一个处理函数:


public void handleDecode(final Result obj, Bitmap barcode)
{
 inactivityTimer.onActivity();
 playBeepSoundAndVibrate();
 AlertDialog.Builder dialog = new AlertDialog.Builder(this);
 if (barcode == null)
 {
 dialog.setIcon(null);
 }
 else
 {
 Drawable drawable = new BitmapDrawable(barcode);
 dialog.setIcon(drawable);
 }
 dialog.setTitle("扫描结果");
 dialog.setMessage(obj.getText());
 dialog.setNegativeButton("确定", new DialogInterface.OnClickListener()
 {
 @Override
 public void onClick(DialogInterface dialog, int which)
 {
  //用默认浏览器打开扫描得到的地址
  Intent intent = new Intent();
  intent.setAction("android.intent.action.VIEW");
  Uri content_url = Uri.parse(obj.getText());
  intent.setData(content_url);
  startActivity(intent);
  finish();
 }
 });
 dialog.setPositiveButton("取消", new DialogInterface.OnClickListener()
 {
 @Override
 public void onClick(DialogInterface dialog, int which)
 {
  finish();
 }
 });
 dialog.create().show();
}

  上面就是整个二维码的解码流程,里面因为涉及很多Camera的使用,所以你如果需要使用二维码识别,需要注意一下你的程序需要申请下面的权限,一般的Camera使用以及Camera的自动对焦等。


<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

5、结语

  上面就是生成和识别二维码的关键流程和代码,有兴趣的朋友可以自己查看ZXing的源码,里面有很多图像分析的知识可以学习。具体使用也可以参考我下面给出的Demo。二维码对于现在移动开发来说很是很常用的技术,所以有空可以了解一下,说不定什么时候就用上了。另外,ZXing库除了二维码外,其实对于条形码也是支持的,只是我这里没有介绍。有需要的自己去看看源码即可。

ZXing开源项目Google Code地址:https://code.google.com/p/zxing/

ZXingDemo下载:ZXingDemo.rar

您可能感兴趣的文章:Android实现二维码扫描和生成的简单方法Android上使用ZXing识别条形码与二维码的方法iOS和Android用同一个二维码实现跳转下载链接的方法Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题Android项目实战(二十八):使用Zxing实现二维码及优化实例基于Android实现个性彩色好看的二维码Android基于google Zxing实现各类二维码扫描效果Android平台生成二维码并实现扫描 & 识别功能Android编程实现二维码的生成与解析Android扫描和生成二维码


--结束END--

本文标题: Android 二维码 生成和识别二维码 附源码下载

本文链接: https://www.lsjlt.com/news/24819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 二维码 生成和识别二维码 附源码下载
      今天讲一下目前移动领域很常用的技术——二维码。现在大街小巷、各大网站都有二维码的踪迹,不管是IOS、Android、WP都有相关支持的软件。之前我就想了解二维码是如何工作,...
    99+
    2022-06-06
    源码下载 二维 二维码 源码 Android
  • Android studio 实现生成二维码和扫描二维码
    效果图 build.gradle(:app)添加依赖 dependencies { implementation 'com.google.zxing:core:3.3.3' imple...
    99+
    2023-09-30
    android studio android ide
  • PHP怎么生成与识别二维码
    小编给大家分享一下PHP怎么生成与识别二维码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二维码的分类线性堆叠式二维码矩阵式二维码二维码的优缺点优点信息容量大编码...
    99+
    2023-06-15
  • Android中二维码的生成方法(普通二维码、中心Logo 二维码、及扫描解析二维码)
    首先声明我们通篇用的都是Google开源框架Zxing,要实现的功能有三个 ,生成普通二维码、生成带有中心图片Logo 的二维码,扫描解析二维码,直接上效果图吧 首先我们需要...
    99+
    2022-06-06
    方法 二维 二维码 Android
  • Python能否识别和生成二维码对象?
    二维码已经成为我们生活中不可或缺的一部分,它们可以用于商业、支付、广告、信息传递等多个方面。Python作为一种高级编程语言,可以用于二维码的生成和识别。在本文中,我们将介绍如何使用Python生成和识别二维码。 生成二维码 我们可以...
    99+
    2023-10-23
    响应 二维码 对象
  • PHP二维码的生成与识别案例
    二维码的分类 线性堆叠式二维码 矩阵式二维码 二维码的优缺点 优点 信息容量大 编码范围广 容错能力强 译码可靠性高 可...
    99+
    2022-11-12
  • 月下载量上千次Android实现二维码生成器app源码分享
    在360上面上线了一个月,下载量上千余次。这里把代码都分享出来,供大家学习哈!还包括教大家如何接入广告,赚点小钱花花,喜欢的帮忙顶一个,大神见了勿喷,小学僧刚学Android没...
    99+
    2022-06-06
    二维 二维码 app Android
  • go语言编程二维码生成及识别
    目录安装 go-qrcode生成普通二维码生成有前后背景颜色的二维码识别二维码我们在做go web开发的时候,应该都遇到生成二维码分享的应用场景,下面我将介绍下使用go如何生成二维码...
    99+
    2022-11-13
  • ASP中如何实现二维码生成与识别?
    随着二维码的广泛应用,二维码的生成和识别已经成为很多应用场景中必不可少的功能。在ASP中实现二维码的生成和识别也变得越来越重要。本文将介绍如何使用ASP实现二维码的生成和识别,并给出相应的代码示例。 一、二维码的生成 安装二维码生成工具...
    99+
    2023-09-24
    二维码 bash numpy
  • python生成和解析二维码
    python生成二维码,常用的模块有pyqrencode和qrcode。 一、用pyqrencode模块生成二维码 安装pyqrencode模块很复杂,依赖的东西也比较多,经过测试总结以下安装过程: 1、下载Cyth...
    99+
    2023-01-31
    二维码 python
  • 二维码生成神器?如何用Java在Unix环境下打包并生成高清二维码。
    二维码已经成为了现代生活中不可或缺的一部分。它们可以用于各种应用,例如支付、活动入场、优惠券和广告等等。本文将介绍如何使用Java在Unix环境下打包并生成高清二维码。 Java是一种广泛使用的编程语言,其特点是跨平台、面向对象、安全性高等...
    99+
    2023-10-17
    打包 unix 二维码
  • Android平台生成二维码并实现扫描 &amp; 识别功能
    1.二维码的前世今生 “二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信...
    99+
    2022-06-06
    生成二维码 二维 二维码 Android
  • 用Java生成二维码并附带文字信息
    目录一、引入依赖二、生成二维码2.1创建实体类2.2创建QRCodeUtil2.3生成单条二维码2.4批量生产二维码三、生成二维码写入PDF文件3.1引入依赖3.2替换工具类中的dr...
    99+
    2022-11-12
  • “PHP、Git和NPM:如何生成二维码?”
    PHP、Git和NPM:如何生成二维码? 二维码是一种方便快捷的信息传递方式,现在已经广泛应用于各种场景。本文将介绍如何使用PHP、Git和NPM生成二维码。 一、PHP生成二维码 PHP是一种广泛应用于Web开发的编程语言,也是生成二维码...
    99+
    2023-09-07
    git 二维码 npm
  • Python如何生成和读取二维码
    这篇文章主要介绍“Python如何生成和读取二维码”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何生成和读取二维码”文章能帮助大家解决问题。二维码是用某种特定的几何图形按一定规律在平面...
    99+
    2023-06-29
  • Java如何生成读取条形码和二维码
    本篇内容介绍了“Java如何生成读取条形码和二维码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!条形码将宽度不等的多个黑条和白条,按照一定的...
    99+
    2023-06-20
  • Java如何加载数组并生成二维码?
    二维码是一种常用的二维条码,它可以存储大量的信息,包括文本、URL、电话号码等等。在Java中,我们可以使用一些开源库来生成二维码,如zxing和qrcode等。本文将介绍如何使用Java加载数组并生成二维码。 一、使用zxing生成二维...
    99+
    2023-08-09
    load 数组 二维码
  • Android基于google Zxing实现二维码的生成
    最近项目用到了二维码的生成与识别,之前没有接触这块,然后就上网搜了搜,发现有好多这方面的资源,特别是google Zxing对二维码的封装,实现的已经不错了,可以直接拿过来引用...
    99+
    2022-06-06
    google zxing 二维 二维码 Android
  • Android中的二维码生成与扫描功能
    0. 前言 今天这篇文章主要描述二维码的生成与扫描,使用目前流行的Zxing,为什么要讲二维码,因为二维码太普遍了,随便一个Android APP都会有二维码扫描。本篇旨在帮助...
    99+
    2022-06-06
    二维 二维码 Android
  • Android-Zxing实现二维码的扫描与生成
    Zxing: Zxing是一个开放源码,用java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。可以实现使用手机内置摄像头完成条形码的扫描以及解码。 ...
    99+
    2022-06-06
    zxing 二维 二维码 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作