二维码(生成二维码和扫描二维码)超简单 超简易

本文介绍了在Android中使用Zxing库实现二维码的生成和扫描的简单步骤,包括配置权限和处理可能出现的三方包错误。

二维码(生成二维码和扫描二维码)Zxing

例:

配置权限:

项目下的 build.gradle 文件里加入,7.0版本以后可能会转入settings.gradle文件

pluginManagement {
    repositories {

        // 改为阿里云的镜像地址
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/public' }

        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {

        // 改为阿里云的镜像地址
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/public' }

        google()
        mavenCentral()

        jcenter()
        // 拉取第三方依赖时,需要在 Porject 下加这行
        maven { url 'https://jitpack.io' }
        
    }
}
rootProject.name = "MyApp"
include ':app'

app下的 build.gradle 文件里加入

    //二维码
    implementation 'com.github.open-android:Zxing:v1.0.3'

app下的 AndroidManifest.xml 文件里加入

    <!-- 二维码 扫码-->
    <uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
    <!--相机权限-->
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <!--文件读取权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

MainActivity 主方法类:
package com.ksxy.myapp;

import android.content.Intent;
import android.graphics.Bitmap;
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 android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.google.zxing.activity.CaptureActivity;
import com.google.zxing.common.BitmapUtils;

/**
 * 扫码Zxing
 */
public class ScanActivity extends AppCompatActivity {
    private final static int REQ_CODE = 1028;

    private EditText scanEdt;
    private ImageView scanEdtImg;

    private ImageView scanImg;
    private TextView scanTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);

        ImageView scanFanhui = findViewById(R.id.csan_fanhui);
        scanFanhui.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        initView();
    }

    private void initView() {
        // 生成二维码
        scanEdt = (EditText) findViewById(R.id.scan_edt);
        scanEdtImg = (ImageView) findViewById(R.id.scan_edt_img);

        // 扫描二维码
        scanImg = (ImageView) findViewById(R.id.scan_img);
        scanTv = (TextView) findViewById(R.id.scan_tv);

        Button btnCreate = (Button) findViewById(R.id.scan_btn_create);
        Button btnScan = (Button) findViewById(R.id.scan_btn_scan);
        btnCreate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 生成二维码
                String content = scanEdt.getText().toString().trim();
                Bitmap bitmap = null;
                try {
                    bitmap = BitmapUtils.create2DCode(content);
                    scanEdtImg.setImageBitmap(bitmap);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        btnScan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 扫描二维码
                Intent intent = new Intent(ScanActivity.this, CaptureActivity.class);
                startActivityForResult(intent, REQ_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQ_CODE) {

            // 相机权限
            String result = data.getStringExtra(CaptureActivity.SCAN_QRCODE_RESULT);
            Bitmap bitmap = data.getParcelableExtra(CaptureActivity.SCAN_QRCODE_BITMAP);

            scanTv.setText("扫描结果为:" + result);
            showToast("扫码结果:" + result);
            if (bitmap != null) {
                scanImg.setImageBitmap(bitmap);
            }
        }
    }

    /**
     * 自定义吐司
     * @param msg
     */
    private void showToast(String msg) {
        Toast.makeText(ScanActivity.this, "" + msg, Toast.LENGTH_SHORT).show();
    }
}
activity_main布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F8F8F8"
    android:orientation="vertical">
    <!--顶部标题-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/csan_fanhui"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:src="@drawable/img_fanhui"></ImageView>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="扫码页面"
            android:textColor="#000000"
            android:textSize="16dp"></TextView>

        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_alignParentBottom="true"
            android:background="#999999" />

    </RelativeLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!--生成二维码-->
        <Button
            android:id="@+id/scan_btn_create"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="生成二维码" />

        <EditText
            android:id="@+id/scan_edt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入内容" />

        <ImageView
            android:id="@+id/scan_edt_img"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/ic_launcher_background" />

        <!--扫描二维码-->
        <Button
            android:id="@+id/scan_btn_scan"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="扫码(支持识别相册二维码)" />


        <ImageView
            android:id="@+id/scan_img"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher_background"/>

        <TextView
            android:id="@+id/scan_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="扫码(支持识别相册二维码)"
            android:textColor="#000000" />

    </LinearLayout>

</LinearLayout>

三方包可能会报错:

android.useAndroidX=true
android.enableJetifier=true

sdk.dir=C\:\\Users\\shen\\AppData\\Local\\Android\\Sdk
ndk.dir=C\:\\Users\\shen\\AppData\\Local\\Android\\Sdk\\ndk-bundle

 。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值