QR Code 二维码的生成与扫描

前言

  现在大街小巷、各大网站都有二维码的踪迹,不管是IOS、Android、WP都有相关支持的软件。
  最近因为工作需要使用相关技术,所以做了初步了解。今天主要是讲述如何使用ZXing库,在项目中要使用到二维码的相关内容,百度(原谅我还在用)之后得知一半都是使用Google的开源库 Zxing,但是网上多半的使用教程都是比较早的,这里给出我总结的一些基础代码和使用规则:

ZXing库

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

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

这里附上ZXing库的官网下载地址:
ZXing官网下载地址

下载之后记得导入自己需要的module中并添加到gradle文件中!

那么,问题是:
如何生成一个二维码?

还是先把下载好的zxing库导入
这里写图片描述

//还是来个页面吧!!
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.qrcodescan.MainActivity">

    <Button
        android:id="@+id/scan_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="扫描二维码"
        android:textSize="30sp" />

    <TextView
        android:textSize="40sp"
        android:id="@+id/scan_result"
        android:layout_width="match_parent"
        android:layout_height="150sp" />

    <EditText
        android:id="@+id/code_messsage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请填写二维码信息" />

    <Button
        android:id="@+id/make_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成二维码"
        android:textSize="30sp" />

    <ImageView
        android:id="@+id/codeimage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

效果图
布局的基本页面

逻辑实现

//有了布局,记得要把下载好的ZXing库导进module中才能使用
//下面的都是精髓了<只能实现生成和扫描哦,因为我还没有太大的使用需求!>
public class MainActivity extends AppCompatActivity {

    private Button codeScan;
    private TextView resultScan;
    private EditText codemesssage;
    private Button codeMake;
    private ImageView codeimage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();//获取控件
        //生成二维码
        codeMake.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取输入框输入的信息
                String message = codemesssage.getText().toString();
                //使用bitmap产生一个logo,当然,也可以不带logo
                Bitmap logoBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                //param1 二维码信息  param2 宽   param3  高  param4  logo
                Bitmap qrCode = EncodingUtils.createQRCode(message, 600, 600, logoBitmap);
                //将生成的二维码赋值给bitmap
                codeimage.setImageBitmap(qrCode);
            }
        });
        //扫描二维码
        codeScan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //调用系统相机,扫描信息
                startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
            }
        });
    }
    //获取返回信息
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {//获取到正确信息
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            resultScan.setText(result);//给TextView赋值扫描到的信息
        } else if (resultCode == RESULT_CANCELED) {//扫描失败,提示
            Toast.makeText(MainActivity.this, "未扫描到信息", Toast.LENGTH_SHORT).show();
        }
    }
    //获取所有的控件
    private void initView() {
        codeScan = (Button) findViewById(R.id.scan_code);
        resultScan = (TextView) findViewById(R.id.scan_result);
        codemesssage = (EditText) findViewById(R.id.code_messsage);
        codeMake = (Button) findViewById(R.id.make_code);
        codeimage = (ImageView) findViewById(R.id.codeimage);
    }
}

这就完成了最基本的二维码的操作!
感谢ZXing,让我们不再劳累.

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值