使用zxing包生成和扫描二维码和一维码
在开发之前要先下载zxing包对其简化,新建一个android工程,把zxing包中的android和android-code中的文件复制到相应的文件夹里面
其中的libs文件夹里需要zxing包中的core文件编译成.jar放在libs文件中,如果出现swich中的r.id.xx报错吧swich改成if语句,如:
if (message.what == R.id.decode) {decode((byte[]) message.obj, message.arg1, message.arg2);} else if (message.what == R.id.quit) {running = false;Looper.myLooper().quit();}
然后右键项目选择属性勾选 is library
然后将新建我们的项目,同样右键选择属性add一下刚刚创建的library然后ok
接下来首先要在项目中添加相应的权限
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 震动权限 --><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /> <!-- 使用照相机权限 --><uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->
然后再activity中添加相应的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="${relativePackage}.${activityClass}" ><Buttonandroid:id="@+id/btn_scan"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="扫描二维码" /><TextViewandroid:id="@+id/tv_scan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="word" /><EditTextandroid:id="@+id/input"android:layout_width="fill_parent"android:layout_height="wrap_content"android:hint="请输入要编码的内容"></EditText><Buttonandroid:id="@+id/gen"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="生成二维码" /><Buttonandroid:id="@+id/genone"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="生成一维码" /><ImageViewandroid:id="@+id/imsge"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal" /><TextView android:id="@+id/tv_textone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"/></LinearLayout>
生成二维码的相关代码,传入要编码的参数,其中的大小也可写成参数传入,这里就不信写
/** 二维码*/public Bitmap CreateTwoDCode(String content) throws WriterException {// 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败BitMatrix matrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, 300, 300);int width = matrix.getWidth();int height = matrix.getHeight();// 二维矩阵转为一维像素数组,也就是一直横着排了int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmap,具体参考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}
生成一维码的代码,参数同上
/** 一维码*/public Bitmap CreateOneDCode(String content) throws WriterException {// 生成一维条码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败BitMatrix matrix = new MultiFormatWriter().encode(content,BarcodeFormat.CODE_128, 500, 200);int width = matrix.getWidth();int height = matrix.getHeight();int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmap,具体参考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}
所有代码(记得注册页面)
package com.example.myscan;import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.android.CaptureActivity;
import com.google.zxing.common.BitMatrix;public class MainActivity extends Activity implements OnClickListener {private Button btn, genone, gen;private TextView tv, textone;private ImageView img;private EditText et;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gen = (Button) findViewById(R.id.gen);img = (ImageView) findViewById(R.id.imsge);btn = (Button) findViewById(R.id.btn_scan);tv = (TextView) findViewById(R.id.tv_scan);et = (EditText) findViewById(R.id.input);genone = (Button) findViewById(R.id.genone);textone = (TextView) findViewById(R.id.tv_textone);btn.setOnClickListener(this);gen.setOnClickListener(this);genone.setOnClickListener(this);initView();}private void initView() {// TODO Auto-generated method stub}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK) {String str = data.getExtras().getString("result");tv.setText(str);}}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtextone.setText("");switch (v.getId()) {case R.id.btn_scan:Log.i("tag", "--->1");Intent intent = new Intent(MainActivity.this, CaptureActivity.class);Log.i("tag", "--->3");startActivityForResult(intent, 0);Log.i("tag", "--->4");break;case R.id.gen:String str = et.getText().toString();if (str.equals("")) {Toast.makeText(MainActivity.this, "请输入信息", Toast.LENGTH_SHORT).show();} else {try {Bitmap bit = CreateTwoDCode(str);img.setImageBitmap(bit);} catch (WriterException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case R.id.genone:String strr = et.getText().toString();if (strr.equals("")) {Toast.makeText(MainActivity.this, "请输入信息", Toast.LENGTH_SHORT).show();} else {try {Bitmap bit = CreateOneDCode(strr);img.setImageBitmap(bit);textone.setText(strr);} catch (WriterException e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;default:break;}}/** 二维码*/public Bitmap CreateTwoDCode(String content) throws WriterException {// 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败BitMatrix matrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, 300, 300);int width = matrix.getWidth();int height = matrix.getHeight();// 二维矩阵转为一维像素数组,也就是一直横着排了int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmap,具体参考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}/** 一维码*/public Bitmap CreateOneDCode(String content) throws WriterException {// 生成一维条码,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败BitMatrix matrix = new MultiFormatWriter().encode(content,BarcodeFormat.CODE_128, 500, 200);int width = matrix.getWidth();int height = matrix.getHeight();int[] pixels = new int[width * height];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++) {if (matrix.get(x, y)) {pixels[y * width + x] = 0xff000000;}}}Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);// 通过像素数组生成bitmap,具体参考apibitmap.setPixels(pixels, 0, width, 0, 0, width, height);return bitmap;}}
其中实现了一维码和二维码的生成和扫描,其中的条形码还没有加只能输入数字的限制,看效果图(没有扫描的图)
使用zxing包生成和扫描二维码和一维码相关推荐
- 生成和扫描二维码(ZXing库)
生成和扫描二维码(ZXing库) 一.ZXing概述 ZXing是谷歌自己推出的一个开源源码的二维码框架,可以实现使用手机的摄像头完成条形码的扫描和解码. 二.整合ZXing框架 将预先获取的core ...
- 只需3个步骤,轻松解决程序员在Java中生成、扫描二维码难题
条形码包含有关产品或公司的信息,以机器可读的形式直观地表示.条码广泛用于跟踪货物和库存管理.我们可以在 WPF 应用程序中轻松生成各种类型的条码.二维码广泛用于分享重要信息.对于不同的要求,您可能希望 ...
- Android 简单直接--无需jar包zing实现生成、扫描二维码
Zing 导入依赖 生成二维码 扫描二维码 扫描回调 工具类 设置竖屏扫描 不多逼逼,直接上代码 导入依赖 implementation 'com.google.zxing:core:3.3.0' i ...
- C#利用ZXing.Net生成条形码,二维码和带Logo的二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
- java利用zxing来生成和解析二维码,支持中文
java在二维码的生成和解析上,网上有些人说如果要解析中文,得去修改工具包的Encoder类中的 static final String DEFAULT_BYTE_MODE_ENCODING = &q ...
- 转【微信小程序 四】二维码生成/扫描二维码
原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示 ...
- 【微信小程序 四】二维码生成/扫描二维码
前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时间加在二维码中,起到刷新的作用,在onshow中每次打开界面就会刷新显示 var QR = require(" ...
- Android 详解使用 Zxing实现前置摄像头扫描二维码、生成二维码
本文同步到简书 现在二维码使用越来越广泛了,几乎处处可见,并且 公司相关的项目中几乎全部都和二维码扫描有关,所以总结一下自己的使用心路历程,总觉得要做点什么来记录自己的成长,让自己的成长有迹可循,如果 ...
- Android之ZXing扫描二维码以及生成二维码
Android之ZXing扫描二维码以及生成二维码 ZXIng项目地址:ZXing地址 项目结构 扫描二维码:使用 CaptureActivity类 项目代码: import android.cont ...
最新文章
- Oracle的外部表
- 超级计算机预测2月有雪寒潮,神预测!中国超级计算提前半个月预测了美国的寒潮...
- parameter与define 区别
- oracle 使从表中随机取出一行记录数据
- 左值和左值引用、右值和右值引用
- HDU2650(高斯整数环)
- PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)
- 遭做空后又被律所调查 贾跃亭的FF上市不到3个月股价已近腰斩
- web前端基础(06css)
- day2_windows下zip安装wamp环境
- WIN10 VMWARE 虚拟机安装WIN10 64系统
- linux中可以使用-af含义,关于Windows中的linux:AF_UNIX
- 股票和数据分析--加权平均数
- 网络计算机和弱电,弱电工程师和网络工程师的区别,你知道吗?
- linux壁纸图片不让复制,一些不常见到的LINUX壁纸,老规矩只提供给红联的兄弟姐妹...
- deepin 更新企业微信最新版本方法
- 服务器审计资质证书,利用ACS服务器实现用户的认证、授权和审计
- 报错Exception opening port “18080“ (port may be in use), cause: “java.net.BindException: Address alrea
- 对自己未来生活的一些规划
- java复习之tomcat配置详解
热门文章
- 十月英语——ready for it?
- Eigen官方文档中文翻译——切片和索引——Eigen: Slicing and Indexing
- vue+element-ui 实现table单元格点击编辑,并且按上下键移动
- android截包方法
- linux下系统调用接口,LINUX系统调用
- vi 和vim 的区别
- oracle查看cpu内存,查看Oracle CPU情况
- 解决com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
- Centos7篇---Centos7 卸载nvidia驱动和CUDA toolkit
- 如何在开发者生态系统的各类资源中修改您的主邮箱(Primary Email Address)?