栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

生成和扫描二维码(ZXing库)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

生成和扫描二维码(ZXing库)

生成和扫描二维码(ZXing库) 一、ZXing概述

ZXing是谷歌自己推出的一个开源源码的二维码框架,可以实现使用手机的摄像头完成条形码的扫描和解码。

二、整合ZXing框架
  1. 将预先获取的core-3.4.0.jar包复制到工程的applibs目录,刷新,然后添加依赖

  2. 集成java源码,将demo工程QrScan中appsrcmainjava目录下包中的zxing和util复制到本工程对应的appsrcmainjava的包下

  3. 然后修改package包名,修改import路径,修改类包名

  4. 同步资源,复制资源目录

    drawable:btn_back.png,flash_off.png,flash_on.png

    layout:复制activity_capture.xml,activity_scanner.xml,toolbar_scanner.xml

    raw:全部复制

    values:复制/替换其中的attrs.xml,ids.xml,colors.xml

  5. 修改工具栏框架包和ViewFinderView包路径

  6. 打开开发权限,在清单文件中添加开发权限

        
        
        
    
    
            
    
  7. 最后运行一下工程,如果不出现错误则整合成功

三、界面设计

activity_main.xml



    






content_main.xml





四、二维码生成

创建类CreateUtil,并编写createQRCode方法来实现

public class CreateUtil {
    //String codestring:要生成二维码的字符串
    // int width:二维码图片的宽度
    // int height:二维码图片的高度
    public static Bitmap createQRCode(String codestring,int width,int height){
        try {
            //首先判断参数的合法性,要求字符串内容不能为空或图片长宽必须大于0
            if (TextUtils.isEmpty(codestring)||width<=0||height<=0){
                return null;
            }
            //设置二维码的相关参数,生成BitMatrix(位矩阵)对象
            Hashtable hashtable=new Hashtable<>();
            hashtable.put(EncodeHintType.CHARACTER_SET,"utf-8");  //设置字符转码格式
            hashtable.put(EncodeHintType.ERROR_CORRECTION,"H");   //设置容错级别
            hashtable.put(EncodeHintType.MARGIN,"2"); //设置空白边距
            //encode需要抛出和处理异常
            BitMatrix bitMatrix=new QRCodeWriter().encode(codestring, BarcodeFormat.QR_CODE,width,height,hashtable);
            //再创建像素数组,并根据位矩阵为数组元素赋颜色值
            int[] pixel=new int[width*width];
            for (int h=0;h 

在MainActivity中编写代码生成二维码

//点击开始生成按钮监听事件
startBt1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String input=inputEt.getText().toString();  //获取用户输入的字符串  
        //调用CreateUtil类生成二维码后显示在界面上
        contentIv.setImageBitmap(CreateUtil.createQRCode(input,contentIv.getWidth(),contentIv.getHeight()));
    }
});
五、二维码扫描

在MainActivity中编写代码

        //开始扫描按钮点击事件监听
        startBt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scanQRCode();
            }
        });
    



    //实现扫描二维码的方法
    private void scanQRCode() {
        //申请相机权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Constant.REQ_PERM_CAMERA);
            return;
        }
        //申请文件(相册)读写权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Constant.REQ_PERM_EXTERNAL_STORAGE);
            return;
        }
        //二维码扫码
        //然后通过Intent机制启动zxing框架的CaptureActivity,请求返回结果
        Intent intent = new Intent(this, CaptureActivity.class);
        startActivityForResult(intent, Constant.REQ_QR_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //扫描结果回调
        if (requestCode == Constant.REQ_QR_CODE && resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String scanResult = bundle.getString(Constant.INTENT_EXTRA_KEY_QR_SCAN);
            //将扫描出的信息显示出来
            resultTv.setText(scanResult);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case Constant.REQ_PERM_CAMERA:
                //摄像头权限申请
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //获得授权
                    scanQRCode();
                } else {
                    //被禁止授权
                    Toast.makeText(this, "请至权限中心打开本应用的相机访问权限", Toast.LENGTH_LONG).show();
                }
                break;
            case Constant.REQ_PERM_EXTERNAL_STORAGE:
                //文件读写权限申请
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //获得授权
                    scanQRCode();
                } else {
                    //被禁止授权
                    Toast.makeText(this, "请至权限中心打开本应用的文件读写权限", Toast.LENGTH_LONG).show();
                }
                break;
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425185.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号