QRCode二维码扫描和生成

原创 2016年12月25日 01:23:43

使用zxing的第三方抽取包,简单的几行代码就可以完成。

首先,下载第三方抽取包libzxing

将其按一个model导入到我们建好的app中,添加model引用,添加权限。

model倒入后的结构如图:


注意:因为权限问题,我们在主程序代码中有一大段是对权限的请求,有注释。

现在看代码:

首先是布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.devin.qrcodedemo.MainActivity">
    <TextView
        android:id="@+id/txt_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_scan_qrcode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="扫描二维码" />
    <EditText
        android:id="@+id/et_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_gen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="生成二维码"/>
    <ImageView
        android:id="@+id/img_qrcode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>
</LinearLayout>

然后是主代码:

/**
 * 二维码快速解析和生成
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final int REQUEST_CODE = 0x0001;//请求码
    private static final int REQUEST_PERMISSION_CAMERA_CODE = 0x0001;//相机权限请求码
    private Button btnScan;//启动扫描
    private Button btnGen;//生成二维码
    private TextView txtResult;//显示返回的扫描结果
    private EditText etCode;//生成二维码的文本
    private ImageView imgQRCode;//显示生成的二维码图像

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        checkPermission();
    }

    /**
     * 检查权限
     */
    private void checkPermission() {
        //获得摄像头权限状态
        int permissionCamera = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        //如果没有权限
        if (permissionCamera != PackageManager.PERMISSION_GRANTED) {
            //请求权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA_CODE);
        } else {
            initListener();
        }
    }

    /**
     * 请求权限
     *
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSION_CAMERA_CODE) {
            if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                initListener();
            }
        }
    }

    /**
     * 初始化
     */
    private void initView() {
        btnScan = (Button) findViewById(R.id.btn_scan_qrcode);
        btnGen = (Button) findViewById(R.id.btn_gen);
        txtResult = (TextView) findViewById(R.id.txt_result);
        etCode = (EditText) findViewById(R.id.et_code);
        imgQRCode = (ImageView) findViewById(R.id.img_qrcode);
    }

    /**
     * 处理返回的扫描结果
     *
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                //获取到解析好的二维码文本
                String result = data.getExtras().getString("result");
                txtResult.setText(result);
            }
        }
    }

    /**
     * 初始化按钮点击监听
     */
    private void initListener() {
        btnScan.setOnClickListener(this);
        btnGen.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_scan_qrcode:
                startSacn();
                break;
            case R.id.btn_gen:
                startGen();
                break;
            default:
                break;
        }
    }

    /**
     * 生成二维码
     */
    private void startGen() {
        String content = etCode.getText().toString();
        if ("".equalsIgnoreCase(content)){
            Toast.makeText(this, "内容不能为空", Toast.LENGTH_SHORT).show();
        }else {
            //调用工具类EncodingUtils生成二维码图片
            Bitmap qrCode = EncodingUtils.createQRCode(content, 600, 600, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
            imgQRCode.setImageBitmap(qrCode);
        }
    }

    /**
     * 进入扫描界面
     */
    private void startSacn() {
        Intent intent = new Intent(this, CaptureActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }
}

就两个文件。很简单。感谢开源库的作者和做抽取的朋友。

如果对扫描框不满意可以去修改。

看看效果:





版权声明:本文为博主原创文章,未经博主允许不得转载。

Zxing和QR CODE 生成与解析二维码实例(带logo篇)

Zxing是Google提供的关于条码(一维码、二维码)的解析工具,利用Zxing和DENSO的QR CODE生成带logo的二维码的实例...
  • gao36951
  • gao36951
  • 2014年11月15日 19:49
  • 30808

Zxing和QR CODE 生成与解析二维码实例(普通篇)

Zxing是Google提供的关于条码(一维码、二维码)的解析工具,利用Zxing和DENSO的QR CODE生成普通的二维码实例...
  • gao36951
  • gao36951
  • 2014年11月15日 18:09
  • 34303

Android之zxing二维码生成与识别

二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的; 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何...
  • bear_huangzhen
  • bear_huangzhen
  • 2015年05月28日 14:17
  • 49602

第三方开源库:Zxing实现扫描和生成 一维码 + 二维码

实现二维码的扫描和生成知识点怎么把String转换成bitmap二维码?//参数:(String str, int widthAndHeight) Bitmap bitmap = EncodingH...
  • ss1168805219
  • ss1168805219
  • 2016年08月11日 20:34
  • 6294

QRCode.js 使用js二维码 生成器

QRCode.js 是一个用于生成二维码的 JavaScript 库。主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库。...
  • SecondLieutenant
  • SecondLieutenant
  • 2017年10月11日 10:59
  • 382

vue2.0实现引用qrcode.js实现获取改变二维码的样式

vue代码 template> div class="qart"> div id="qrcode" ref="qrcode"> div> in...
  • iceking66
  • iceking66
  • 2017年09月30日 10:31
  • 5530

在vue项目中前端生成二维码应该注意的问题

前端要生成二维码,可以用jquery.qrcode.min.js第三方插件来生成,并且和jquery一起用: 在使用这个插件的时候,不能使用npm安装,只能中需要的页面直接引入,但是这里有几个细节需...
  • luckylqh
  • luckylqh
  • 2016年10月20日 17:51
  • 11054

QRcodeJS生成二维码

QRCodeJS用法及下载
  • bomess
  • bomess
  • 2015年05月24日 16:43
  • 8454

vue项目生成二维码功能推荐使用node-qrcode

https://github.com/soldair/node-qrcode 近期项目开发前端需要用到生成二维码功能,前端基于vue开发,找了下轮子,主要都是qart.js或者qrcode.js等,都...
  • cheer_up_cs
  • cheer_up_cs
  • 2017年12月22日 15:16
  • 425

二维码生成工具,扫描二维码查看页面

扫描二维码进入页面
  • Bright2017
  • Bright2017
  • 2017年06月12日 13:39
  • 254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QRCode二维码扫描和生成
举报原因:
原因补充:

(最多只允许输入30个字)