Android编程实现二维码的生成与解析

作者:lee0oo0 时间:2021-12-08 23:13:15 

本文实例讲述了Android编程实现二维码的生成与解析。分享给大家供大家参考,具体如下:

直接上代码,代码上面有具体的解析,并且提供jar供下载:二维码Jar包.rar 。

根据文本生成对应的二维码:


// 生成QR图
private void createImage() {
 try {
  // 需要引入core包
  QRCodeWriter writer = new QRCodeWriter();
  String text = qr_text.getText().toString();
  Log.i(TAG, "生成的文本:" + text);
  if (text == null || "".equals(text) || text.length() < 1) {
   return;
  }
  // 把输入的文本转为二维码
  BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE,
    QR_WIDTH, QR_HEIGHT);
  System.out.println("w:" + martix.getWidth() + "h:"
    + martix.getHeight());
  Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
  hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
  BitMatrix bitMatrix = new QRCodeWriter().encode(text,
    BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
  int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
  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;
    }
   }
  }
  Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
    Bitmap.Config.ARGB_8888);
  bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
  qr_image.setImageBitmap(bitmap);
 } catch (WriterException e) {
  e.printStackTrace();
 }
}

根据二维码图片读取内容:


// 解析QR图片
private void scanningImage() {
 Map<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
 hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
 // 获得待解析的图片
 Bitmap bitmap = ((BitmapDrawable) qr_image.getDrawable()).getBitmap();
 RGBLuminanceSource source = new RGBLuminanceSource(bitmap);
 BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source));
 QRCodeReader reader = new QRCodeReader();
 Result result;
 try {
  result = reader.decode(bitmap1, hints);
  // 得到解析后的文字
  qr_result.setText(result.getText());
 } catch (NotFoundException e) {
  e.printStackTrace();
 } catch (ChecksumException e) {
  e.printStackTrace();
 } catch (FormatException e) {
  e.printStackTrace();
 }
}

希望本文所述对大家Android程序设计有所帮助。

标签:Android,二维码
0
投稿

猜你喜欢

  • Java异常处理try catch的基本用法

    2022-11-27 11:36:15
  • 用java在web环境下上传和下载文件的技巧

    2021-06-09 18:17:17
  • Mybatis-Plus sum聚合函数及按日期查询并求和的方式详解

    2022-07-09 12:58:07
  • Android判断用户2G/3G/4G移动数据网络

    2022-12-13 03:21:49
  • C#中File类的文件操作方法详解

    2022-10-04 01:25:28
  • Windows窗体的.Net框架绘图技术实现方法

    2022-06-29 13:32:23
  • mybatis-plus QueryWrapper 添加limit方式

    2022-12-09 02:08:11
  • Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦

    2022-11-21 07:49:54
  • 初识Java环境变量配置及IDEA

    2022-09-20 06:46:41
  • 详解java中BigDecimal精度问题

    2021-08-17 10:24:59
  • mybatis多表查询的实现(xml方式)

    2021-07-11 01:21:38
  • C# SQLite执行效率的优化教程

    2021-07-11 00:11:41
  • 全面分析c# LINQ

    2023-10-25 16:35:16
  • c# 实现获取汉字十六进制Unicode编码字符串的实例

    2023-03-21 11:22:35
  • Java实现雪花算法(snowflake)

    2022-10-27 03:43:23
  • Android编程实现自定义系统菜单背景的方法

    2023-07-16 22:02:51
  • 详解java中的PropertyChangeSupport与PropertyChangeListener

    2023-10-20 06:19:27
  • Java异常学习之自定义异常详解

    2023-09-25 00:57:27
  • Android延迟实现的几种解决方法及原理分析

    2023-10-24 18:07:15
  • java中Servlet程序下载文件实例详解

    2022-04-28 18:26:10
  • asp之家 软件编程 m.aspxhome.com