引用zxing库
build.gradle的dependencies里添加:
implementation('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
implementation('com.google.zxing:core:3.3.0') {
	exclude module: 'support-v13'
	exclude group: 'com.android.support'
}
QRCodeUtil通用类
package com.example.myapplication;
import android.graphics.Bitmap;
import android.text.TextUtils;
import androidx.annotation.ColorInt;
import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
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;
import java.util.Hashtable;
public class QRCodeUtil {
    @Nullable
    public static Bitmap createQRCodeBitmap(String content, int width, int height) {
        return createQRCodeBitmap(content, width, height, "UTF-8", "H", "2", ViewCompat.MEASURED_STATE_MASK, -1);
    }
    @Nullable
    public static Bitmap createQRCodeBitmap(String content, int width, int height, @Nullable String character_set, @Nullable String error_correction, @Nullable String margin, @ColorInt int color_black, @ColorInt int color_white) {
        if (TextUtils.isEmpty(content)) {
            return null;
        }
        if (width < 0 || height < 0) {
            return null;
        }
        try {
            Hashtable hashtable = new Hashtable();
            if (!TextUtils.isEmpty(character_set)) {
                hashtable.put(EncodeHintType.CHARACTER_SET, character_set);
            }
            if (!TextUtils.isEmpty(error_correction)) {
                hashtable.put(EncodeHintType.ERROR_CORRECTION, error_correction);
            }
            if (!TextUtils.isEmpty(margin)) {
                hashtable.put(EncodeHintType.MARGIN, margin);
            }
            BitMatrix bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hashtable);
            int[] pixels = new int[(width * height)];
            for (int i = 0; i < height; i++) {
                for (int j = 0; j < width; j++) {
                    if (bitMatrix.get(j, i)) {
                        pixels[(i * width) + j] = color_black;
                    } else {
                        pixels[(i * width) + j] = color_white;
                    }
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
            return bitmap;
        } catch (WriterException e4) {
            e4.printStackTrace();
        }
        return null;
    }
}
界面代码
activity_main.xml里添加一个ImageView:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MissingDefaultResource">
    <ImageView
        android:layout_gravity="center"
        android:id="@+id/ivQrcode"
        android:layout_width="150dp"
        android:layout_height="150dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
    private ImageView ivQrcode;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.ivQrcode = findViewById(R.id.ivQrcode);
        this.ivQrcode.setImageBitmap(QRCodeUtil.createQRCodeBitmap("http://www.zhupite.com/", 200, 200));
    }
}
测试运行
运行App后,用其他应用的扫一扫功能,可以识别出网址并自动加载网页渲染。
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/android/zxing-qrcode.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)