关于生成二维码

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;
        }
    }    

}

原文地址:https://www.cnblogs.com/taogev5/p/5714717.html