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


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

    在这里插入图片描述

    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'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Manifests.xml

    	<uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera" />
        <uses-feature android:name="android.hardware.camera.autofocus" />
    
    • 1
    • 2
    • 3

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    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();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
  • 相关阅读:
    Word处理控件Aspose.Words功能演示:在 Python 中将 Word 文档转换为 EPUB
    Spring 源码阅——忽略感知接口对应成员变量的自动装配
    SecureCRT取消Session记录的密码
    【PG】PostgreSQL单机部署(简洁命令版)
    作为一名31岁的软件测试员,工作3年,月薪不到2W,担心被应届生取代
    K8S部署
    Array.from()的使用方法(数组去重,伪数组转为数组,数组浅克隆),Set和Map数据结构
    安卓项目结构分析
    你家的音响是摆设,但别人家的可是音质老大
    web APIs——第一天(上)
  • 原文地址:https://blog.csdn.net/weixin_74239923/article/details/132646607