Android studio 实现生成二维码和扫描二维码

效果图

build.gradle(:app)添加依赖

java 复制代码
dependencies {
    implementation 'com.google.zxing:core:3.3.3'
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
    implementation 'com.google.zxing:javase:3.0.0'
}

Manifests.xml

java 复制代码
	<uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

activity_main.xml

java 复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    >

    <ImageView
        android:id="@+id/qr_code_image"
        android:layout_width="200dp"
        android:layout_height="200dp" />
    <EditText
        android:id="@+id/creat_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入想要生成二维码的文字"
        android:layout_marginTop="20dp"
        android:textSize="20dp"/>
    <Button
        android:id="@+id/creat_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生成二维码"
        android:layout_marginTop="20dp"/>
    <Button
        android:id="@+id/scan_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="扫描二维码"
        android:layout_marginTop="20dp"/>
</LinearLayout>

MainActivity

java 复制代码
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.journeyapps.barcodescanner.BarcodeEncoder;

/**
 * 实现生成二维码和扫描二维码的功能
 */
public class MainActivity extends AppCompatActivity {

    private ImageView qrCodeImageView;
    private Button scanButton;
    private Button creatButton;
    private EditText creatText;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        qrCodeImageView = findViewById(R.id.qr_code_image);
        scanButton = findViewById(R.id.scan_button);
        creatButton = findViewById(R.id.creat_button);
        creatText = findViewById(R.id.creat_text);

        // 生成二维码
        creatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                generateQRCode(creatText.getText().toString());
            }
        });


        // 扫描二维码
        scanButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ScanActivity.class);
                startActivity(intent);            }
        });
    }

    private void generateQRCode(String text) {
       MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {

            //使用 multiFormatWriter.encode() 函数将文本 text 编码为一个二维码的 BitMatrix 对象
            BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE, 200, 200);
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();

           //使用 BarcodeEncoder 类的 createBitmap() 函数将 BitMatrix 对象转换为一个 Bitmap 对象
            Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);

            //使用 qrCodeImageView.setImageBitmap() 方法将生成的二维码图像显示在 qrCodeImageView 这个 ImageView 上
            qrCodeImageView.setImageBitmap(bitmap);
        } catch (WriterException e) {
            e.printStackTrace();
        }
    }
}

ScanActivity

java 复制代码
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.Result;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

/**
 * 创建一个新的Activity用于扫描二维码,在该Activity中,使用ZXing提供的库来实现二维码的扫描功能
 */
public class ScanActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 初始化二维码扫描
        //创建了一个新的IntentIntegrator对象,并传入当前上下文(this)作为参数。IntentIntegrator是一个用于集成扫描仪应用程序的类
        IntentIntegrator intentIntegrator = new IntentIntegrator(this);

        //设置了IntentIntegrator对象期望的条形码格式为QR码。
        //通过调用setDesiredBarcodeFormats()方法并传入IntentIntegrator.QR_CODE,表示只扫描QR码格式的条形码
        intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);

        //将提示信息设置为"Scan a QR Code"
        intentIntegrator.setPrompt("Scan a QR Code");

        //通过调用setCameraId()方法并传入0,表示使用默认的摄像头设备进行扫描
        intentIntegrator.setCameraId(0);

        //通过调用setBeepEnabled()方法并传入false,表示在扫描过程中不发出蜂鸣声音效
        intentIntegrator.setBeepEnabled(false);

        //通过调用setOrientationLocked()方法并传入true,表示在扫描过程中保持设备竖直方向不变
        intentIntegrator.setOrientationLocked(true);

        //通过调用initiateScan()方法,IntentIntegrator对象将启动扫描仪应用程序并等待扫描结果
        intentIntegrator.initiateScan();

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null && result.getContents() != null) {
            String scannedText = result.getContents();
            Toast.makeText(this, "扫描结果: " + scannedText, Toast.LENGTH_SHORT).show();
            // 在这里处理扫描到的二维码内容
        }
        finish();
    }
}
相关推荐
恋猫de小郭1 小时前
再次紧急修复,Flutter 针对 WebView 无法点击问题增加新的快速修复
android·前端·flutter
李慕婉学姐1 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
Lv11770081 小时前
Visual Studio中的字典
ide·笔记·c#·visual studio
Alsn862 小时前
24.idea专业版安装+maven、tomcat安装并部署到idea
java·ide·intellij-idea
有梦想的鱼2 小时前
vscode letax编译中英文论文(傻瓜式、一分钟)
ide·vscode·编辑器
qq_214782613 小时前
GWalkR,部分替代Tableau!
ide·python·jupyter
似霰3 小时前
传统 Hal 开发笔记6----App 访问硬件服务
android·framework·hal
爱装代码的小瓶子4 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
私人珍藏库4 小时前
AutoGLM无需豆包手机,让AI自动帮你点外卖-刷视频
android·ai·智能手机·工具·软件·辅助·autoglm