(安卓自学笔记)二维码生成以及扫描

原文章:点击打开链接

在这里介绍一个简单速成的二维码方法

首先加入相机权限声明

<uses-permission android:name="android.permission.CAMERA" />
<!--相机-->

有网络的条件下添加依赖

compile 'com.journeyapps:zxing-android-embedded:3.5.0'

写一个布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="生成"
            android:id="@+id/btn_produce" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="扫描"
            android:id="@+id/btn_scan" />
    </LinearLayout>
    <ImageView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:id="@+id/iv_zxing" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/tv_result"
        android:hint="result"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/et_string"
        android:text="http://www.csdn.net"/>
</LinearLayout>


生成二维码所需的主要代码

    public void generate(View view,String string) {
        Bitmap qrBitmap = generateBitmap(string,300, 300);
        iv_zxing.setImageBitmap(qrBitmap);
    }
    private Bitmap generateBitmap(String content, int width, int height) {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        Map<EncodeHintType, String> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        try {
            BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            int[] pixels = new int[width * height];
            for (int i = 0; i < height; i++) {
                for (int j = 0; j < width; j++) {
                    if (encode.get(j, i)) {
                        pixels[i * width + j] = 0x00000000;
                    } else {
                        pixels[i * width + j] = 0xffffffff;
                    }
                }
            }
            return Bitmap.createBitmap(pixels, 0, width, width, height, Bitmap.Config.RGB_565);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }

这里在点击生成按钮那里,调用上面的generate()函数,并传入EditText中获得的文字(view没用)

对文字处理后generateBitmap得到的bitmap,传给布局中的imageview,调用

iv_zxing.setImageBitmap(qrBitmap);

就可以显示我们生成的二维码啦


扫描二维码所需的代码

在点击扫描按钮那里,调用以下代码,利用IntentIntegrator 进入扫描界面

IntentIntegrator intentIntegrator=new IntentIntegrator(ZxingActivity.this);
                    intentIntegrator.initiateScan();
                    Log.w("Zxingactivity","开始扫描");

扫描成功后,从扫描界面返回

重写Actictivity中的onActivityResult方法来对获得的数据进行处理

public void onActivityResult(int requestCode,int resultCode,Intent data)
    {
        IntentResult result=IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
        if(result!=null)
        {
            if(result.getContents()==null)
            {
                Toast.makeText(this, "取消扫描", Toast.LENGTH_SHORT).show();
            }
            else{
                Toast.makeText(this,"扫描成功",Toast.LENGTH_SHORT).show();
                tv_result.setText(result.getContents());
            }
        }
        else{
            super.onActivityResult(requestCode,resultCode,data);
        }
    }

调用  tv_result.setText(result.getContents());

并展示在textview中,这样基本的功能就实现了。


另外条形码也可以扫描哦

猜你喜欢

转载自blog.csdn.net/weixin_40980148/article/details/80369789