基于Zxing的二维码、条形码的扫描以及二维码的生成(简洁高效)

效果图:

条形码扫描:
这里写图片描述

二维码扫描:
这里写图片描述

二维码生成:
这里写图片描述

项目结构:

这里写图片描述

这个项目很简单,就2个类,一个jar包和一些依赖,十分简洁。

主要代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView resultTV;
    private ImageView resultIV;
    private EditText strET;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resultTV = (TextView) findViewById(R.id.tv_scan_result);
        resultIV = (ImageView) findViewById(R.id.iv_qr_image);
        strET = (EditText) findViewById(R.id.et_qr_string);
    }


    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_scan_barcode) {

            IntentIntegrator integrator = new IntentIntegrator(this);

            //获取屏幕尺寸
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);

            //条形码
            int width = dm.heightPixels / 2;
            int height = dm.widthPixels / 2;
            integrator.setScanningRectangle(width, height);//扫描框
            integrator.setPrompt("请对准条形码进行扫描");
            integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);//条形码

            //二维码
//            int len = dm.heightPixels / 2;
//            integrator.setScanningRectangle(len, len);//扫描框
//            integrator.setPrompt("请对准二维码进行扫描");
//            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);//二维码


            integrator.setResultDisplayDuration(0);//扫描框内横线的时间
            integrator.setCameraId(0);
            integrator.initiateScan();

        } else {
            final String filePath = getFileRoot(this) + File.separator + "qr_" + System.currentTimeMillis() + ".jpg";
            //二维码图片较大时,生成图片、保存文件的时间可能较长,因此放在新线程中
            new Thread(new Runnable() {
                @Override
                public void run() {
                    boolean success = QRCodeUtil.createQRImage(strET.getText().toString().trim(), 800, 800, BitmapFactory.decodeResource(getResources(), R.drawable.c4),
                            filePath);

                    if (success) {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                resultIV.setImageBitmap(BitmapFactory.decodeFile(filePath));
                            }
                        });
                    }
                }
            }).start();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                resultTV.setText("扫描取消");
            } else {
                resultTV.setText(result.getContents());
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    //文件存储根目录
    private String getFileRoot(Context context) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File external = context.getExternalFilesDir(null);
            if (external != null) {
                return external.getAbsolutePath();
            }
        }
        return context.getFilesDir().getAbsolutePath();
    }
}

源码下载:

我在这里

参考链接:感谢这篇博客

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值