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

news/2024/7/16 7:56:26 标签: android studio, android, ide

效果图
在这里插入图片描述

在这里插入图片描述

build.gradle(:app)添加依赖

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

	<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

<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

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

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();
    }
}

http://www.niftyadmin.cn/n/4998418.html

相关文章

大数据课程K18——Spark的ALS算法与显式矩阵分解

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的ALS算法与显式矩阵分解; ⚪ 掌握Spark的ALS算法原理; 一、ALS算法与显式矩阵分解 1. 概述 我们在实现推荐系统时,当要处理的那些数据是由用户所提供的自身的偏好数据,这些…

CSP 202305-1 重复局面

题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 问题描述 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、…

HTML <title> 标签

实例 一个简单的 HTML 文档,带有尽可能少的必需的标签: <html><head><title>XHTML Tag Reference</title></head><body>The content of the document......</body></html>定义和用法 <title> 元素可定义文档的标题…

kakfa 3.5 kafka服务端处理消费者客户端拉取数据请求源码

一、服务端接收消费者拉取数据的方法二、遍历请求中需要拉取数据的主题分区集合&#xff0c;分别执行查询数据操作&#xff0c;1、需要选择适合的主题副本进行数据的读取操作&#xff0c;这里选项列表中需要排除分区Leader副本 三、区分是Follower拉取数据还是消费者拉取数据请…

MATLAB/Python编程:绘图属性的确定

注1:本文系“MATLAB/Python的编程教程”系列之一,致力于使用Python和Matlab实现特定的功能。本次要实现的功能是:绘图属性(字体、大小、坐标范围等)的确定。 文章目录 MATLAB/Python编程:绘图属性的确定Python 中的绘图安装matplotlib创建一个简单的图形设置字体与大小查看…

Java8实战-总结19

Java8实战-总结19 使用流映射对流中每一个元素应用函数流的扁平化 使用流 映射 一个非常常见的数据处理套路就是从某些对象中选择信息。比如在SQL里&#xff0c;你可以从表中选择一列。Stream API也通过map和flatMap方法提供了类似的工具。 对流中每一个元素应用函数 流支持…

《凤凰架构》第三章——事务处理

前言 由于一些地方原文感觉不太清楚&#xff0c;有些地方用小林coding的文章代替。 总结 事务处理主要的目的就是要让数据在各种条件下&#xff0c;最终的运行结果都能符合你的期望。要达成这个目标有三点需要满足&#xff1a;原子性&#xff08;业务要么同时成功&#xff0…

【详解配置文件系列】es7配置文件详解

首发博客地址 系列文章地址 配置文件 # ---------------------------------- Cluster -----------------------------------cluster.name: my-cluster# 集群的名称node.name: node-1# 节点的名称node.master: true# 是否允许节点成为主节点&#xff08;默认为 true&#xff09;…