前言

二维码大家都见识过,这里就不废话了,直接来干货。

步骤

  • 导入依赖
    compile 'com.google.zxing:core:3.2.1'      //zxing核心依赖compile 'com.journeyapps:zxing-android-embedded:3.3.0'  //生成二维码依赖
  • 生成二维码
    这里封装一个ZxingUtils,主要功能就是生成二维码的Bitmap对象,调用工具类的方式就不多说了,就是一个点击事件生成就好
package com.example.zxingtest.utils;import android.graphics.Bitmap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;/*** Created by D'Russel on 2017/7/31.*/public class ZxingUtils {public static Bitmap createBitmap(String str){Bitmap bitmap = null;BitMatrix result = null;MultiFormatWriter multiFormatWriter = new MultiFormatWriter();try {result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, 400, 400);BarcodeEncoder barcodeEncoder = new BarcodeEncoder();bitmap = barcodeEncoder.createBitmap(result);} catch (WriterException e){e.printStackTrace();} catch (IllegalArgumentException iae){ // ?return null;}return bitmap;}}
  • 实现扫描二维码功能

在布局文件activity_main.xml中添加一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.zxingtest.activity.MainActivity"><TextView        android:id="@+id/tv_test"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageView        android:id="@+id/pic_test"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Button        android:id="@+id/btn_test"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="生成二维码"/><Button        android:id="@+id/btn_test2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="扫描二维码"/></LinearLayout>

在MainActivity中

package com.example.zxingtest.activity;import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import com.example.zxingtest.R;
import com.example.zxingtest.utils.ZxingUtils;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;/*** Created by D'Russel on 2017/7/31.*/public class MainActivity extends AppCompatActivity{@BindView(R.id.tv_test)TextView tv_test;@BindView(R.id.pic_test)ImageView img_test;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);}//生成二维码@OnClick(R.id.btn_test)public void onTest(View view){Bitmap bitmap = ZxingUtils.createBitmap("hahahaha");img_test.setImageBitmap(bitmap);}//扫描二维码@OnClick(R.id.btn_test2)public void onTest2(View view){new IntentIntegrator(this).setOrientationLocked(false).setCaptureActivity(ScanActivity.class) // 设置自定义的activity是ScanActivity.initiateScan(); // 初始化扫描}@Override
// 通过 onActivityResult的方法获取扫描回来的值protected void onActivityResult(int requestCode, int resultCode, Intent data) {IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);if(intentResult != null) {if(intentResult.getContents() == null) {Toast.makeText(this,"内容为空",Toast.LENGTH_LONG).show();} else {Toast.makeText(this,"扫描成功",Toast.LENGTH_LONG).show();// ScanResult 为 获取到的字符串String ScanResult = intentResult.getContents();tv_test.setText(ScanResult);}} else {super.onActivityResult(requestCode,resultCode,data);}}}

这里有一个作为扫描框的ScanActivity,先看布局文件activity_scan.xml,这里放置一个扫描框,二维码的扫描功能就是这个扫描框提供的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"tools:context="com.example.zxingtest.activity.ScanActivity"><com.journeyapps.barcodescanner.DecoratedBarcodeView        android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/dbv"app:zxing_framing_rect_width="200dp"app:zxing_framing_rect_height="200dp"app:zxing_preview_scaling_strategy="fitXY"app:zxing_use_texture_view="true"></com.journeyapps.barcodescanner.DecoratedBarcodeView></RelativeLayout>

ScanActivity中

package com.example.zxingtest.activity;import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.zxingtest.R;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import butterknife.BindView;
import butterknife.ButterKnife;/*** Created by D'Russel on 2017/7/31.*/public class ScanActivity extends AppCompatActivity{@BindView(R.id.dbv) DecoratedBarcodeView mDBV;private CaptureManager captureManager;     //捕获管理器@Overrideprotected void onPause() {super.onPause();captureManager.onPause();}@Overrideprotected void onResume() {super.onResume();captureManager.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();captureManager.onDestroy();}@Overridepublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {super.onSaveInstanceState(outState, outPersistentState);captureManager.onSaveInstanceState(outState);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_scan);ButterKnife.bind(this);captureManager = new CaptureManager(this,mDBV);captureManager.initializeFromIntent(getIntent(),savedInstanceState);captureManager.decode();}
}

这里解释一下 CaptureManager
CaptureManager中文名是捕获管理器,从名字上可以看出,这是扫描框中对捕获内容处理的管理器,那上面的代码就很好理解了,我们让它的生命周期同Activity的生命周期一样。

生成二维码:

扫描二维码:

Android zxing 二维码扫描和生成方法(简单版)相关推荐

  1. Android Zxing二维码扫描优化

    关于Zxing的使用,网上有大量优秀的文章讲解,本文不再叙述. 用过Zxing的童鞋都知道Zxing扫描识别率较低,速度较慢.这里介绍一个第三方库,github地址为: https://github. ...

  2. Android之二维码扫描和生成

    一:效果图 二:实现步骤 1.导入第三方架包,下载地址: http://download.csdn.net/detail/android_cll/9784977 2.在项目build.gradle文件 ...

  3. Android zxing,轻松实现二维码扫描、生成

    Android  zxing,轻松实现二维码扫描.生成 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有, ...

  4. Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图

    简介 上一篇 Android实现二维码扫描功能(三)-闪光灯控制介绍了光线较弱情况下开启闪光灯来辅助二维码识别的方法. 本篇我们介绍如何识别相册中的图片(含二维码) 动态演示 使用模拟器录制了动画演示 ...

  5. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图

    文章目录 1.演示 2.权限问题 3.实现步骤 4.工具类 5.图片Uri处理(重要更新) 1.演示 2.权限问题 部分朋友在打开相册时遇到读写权限未授权的问题,我在开发的时候没有遇到,也没有注册读写 ...

  6. Android实现二维码扫描功能(一)ZXing插件接入

    简介 关于Android扫描二维码的功能实现,网上有很多相关资料.在对比之后,选用了前辈了修改过的ZXing直接接入到项目中,特制作此demo,介绍整个过程. (最新更新)本篇文章讲解的接入方法对部分 ...

  7. Android 集成zxing二维码扫描、自定义

    项目主要有zxing的基本使用,包含扫描回调.连续扫描.自定义扫描框: 一.依赖库 implementation 'com.journeyapps:zxing-android-embedded:4.3 ...

  8. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题

    自定义ZXing二维码扫描界面并解决取景框拉伸等问题 参考文章: (1)自定义ZXing二维码扫描界面并解决取景框拉伸等问题 (2)https://www.cnblogs.com/tommylemon ...

  9. iOS 原生二维码扫描和生成

    代码地址如下: http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描 ...

最新文章

  1. Linux中的日志系统介绍
  2. 在Servlet中使用开源fileupload包实现文件上传功能
  3. php禁止国外访问,wordpress 禁止国外ip访问
  4. c语言 proteus 延迟2秒_周周练 | 专升本C语言
  5. java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧
  6. 日常生活小技巧 -- “Error: Encountered an improper argument”的解决方法
  7. spring mvc 教程_Spring MVC开发–快速教程
  8. Linux_linux常用工具(git,vim ,gcc ,gdb,权限)超详解
  9. 更新Composer依赖报错处理Fatal error: Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRe...
  10. ffmpeg基础流程:音频处理
  11. Python进阶(五)模块、包详解
  12. MapGIS制图学习(2)
  13. Web网页设计作业html
  14. SpringBoot 中html的页面间跳转
  15. 固态硬盘是什么接口_小白指南:固态硬盘接口傻傻分不清,新手用户应该如何选?...
  16. STM32WB55_NUCLEO开发(8)----授权
  17. 计算机学院开学发言,开学典礼 | 计控学院研究生代表发言稿
  18. java调用腾讯云的乐固加固给apk进行加固处理。
  19. 你以为Shell只是命令行?读懂这篇文,给你的工作赋能
  20. 【QT】ComboBox下拉菜单背景透明设置

热门文章

  1. java 替换回车 char10_EXCEL的换行符等,输入,替换,和 char(10) char(13)等
  2. 国际站反作弊系列之 — 反作弊介绍
  3. centos7下挂载企业大硬盘,超过2T的分区
  4. ubuntu没有inittab
  5. 一个repeater
  6. 来自大厂 10+ 前端面试题附答案(整理版)
  7. 播放本地视频或者打开本地摄像头抓取特定颜色的物体
  8. VMware虚拟机克隆后 不能重启网络
  9. SSL(Secure Sockets Layer)安全套接层协议详解
  10. 文本的下划线的几种方式