您的位置:首页 > 其它

QR Code 二维码的生成与扫描

2017-12-28 19:31 711 查看

前言

  现在大街小巷、各大网站都有二维码的踪迹,不管是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,让我们不再劳累.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: