标签:
package com.example.qr_codescan;
import java.util.Hashtable;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
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 com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
/**
* 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;
* 在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,
* 通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:
* 它具有条码技术的一些共性:每种码制有其特定的字符集;
* 每个字符占有一定的宽度;
* 具有一定的校验功能等。
* 同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点
*
*
*
Quick Response Code
* @author 喆
*常见的有PDF417、QR Code、Code 49、Code 16K、Code One等
*
* 功能
●信息获取(名片、地图、WIFI密码、资料)
●网站跳转(跳转到微博、手机网站、网站)
●广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
●手机电商(用户扫码、手机直接购物下单)
●防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
●优惠促销(用户扫码,下载电子优惠券,抽奖)
●会员管理(用户手机上获取电子会员信息、VIP服务)
●手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
*/
public class MainActivity extends Activity {
private final static int SCANNIN_GREQUEST_CODE = 1;
private static final int QR_WIDTH = 200;
private static final int QR_HEIGHT = 200;
/**
* 显示扫描结果
*/
private EditText mEditText_Result ;
/**
* 显示扫描拍的图片
*/
private ImageView mImageView;
/**
* 输入的信息
*/
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText_Result = (EditText) findViewById(R.id.result);
mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
mEditText = (EditText) findViewById(R.id.et_msg);
/**
* 点击按钮跳转到二维码扫描界面,
* 这里用的是startActivityForResult跳转
* 扫描完了之后跳回该界面
*/
scanQRCodeImage();
/**
* 生成二维码
*/
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/**
* 生成二维码图片
*/
createQRCodeImage();
}
});
}
private void scanQRCodeImage() {
// TODO Auto-generated method stub
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MipcaActivityCapture.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
}
});
}
protected void createQRCodeImage() {
// TODO Auto-generated method stub
QRCodeWriter writer = new QRCodeWriter();
String text = mEditText.getText().toString();
/**
* 排除情况
*/
if (text == null || "".equals(text) || text.length() < 1) {
return;
}
/**
* 把输入的文本转为二维码
*/
try {
BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE,
QR_WIDTH, QR_HEIGHT);
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);
/**
* 显示
*/
mImageView.setImageBitmap(bitmap);
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 接受结果的方法
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case SCANNIN_GREQUEST_CODE:
if(resultCode == RESULT_OK){
Bundle bundle = data.getExtras();
//显示扫描到的内容
mEditText_Result.setText(bundle.getString("result"));
//显示
mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
}
break;
}
}
}
标签:
原文地址:http://www.cnblogs.com/taogev5/p/5714717.html