zoukankan      html  css  js  c++  java
  • 关于生成二维码

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

    }

  • 相关阅读:
    actionBar-进入界面闪烁问题解决
    softInputMode- 软件盘的设置
    LinearLayout -设置负值属性
    launcher- 第三方应用图标替换
    resource-color 的引用
    java学习笔记——IO流部分
    二进制基础
    java学习笔记——IO部分(遍历文件夹)
    Java线程:线程的同步与锁
    AWT与Swing的区别
  • 原文地址:https://www.cnblogs.com/taogev5/p/5714717.html
Copyright © 2011-2022 走看看