ZXing Kotlin 完整指南:QR码与条形码扫描库教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

ZXing Kotlin 完整指南:QR码与条形码扫描实战教程

在移动应用和流程自动化日益普及的今天,快速读取QR码和条形码已成为行业标配。ZXing(发音为"zebra crossing")是一款强大的开源图像处理库,让开发者能够轻松集成一维码(EAN、UPC、Code 128)和二维码(QR、Data Matrix、Aztec)的识别与生成功能。

本教程专为Kotlin开发者打造,从基础安装到编写高性能扫描器,带你全面掌握ZXing。我们不仅讲解标准用法,还会剖析新手常踩的坑,助你少走弯路。

1. ZXing是什么?为什么选择它?

ZXing 是专注于条码解码与编码的图像处理库,由Google创建并由社区维护。它的核心优势在于跨平台支持(Java/Kotlin、C++、JavaScript、Python)以及海量格式兼容:从经典的QR码到PDF417等工业专用码,一应俱全。

为什么在Kotlin项目中选择ZXing?首先,它是Android开发的黄金标准。其次,库中内置了与CameraX或Camera2配合使用的相机类,省去了编写底层视频捕获代码的麻烦。此外,ZXing不仅能处理实时视频流,还能解析图库中的静态图片,应用场景极为广泛:从扫描收据到物流包裹条码识别,无所不能。

2. 安装指南

在Kotlin(Android)项目中,通过Gradle构建系统即可完成安装。在 build.gradle(Module: app)文件中添加以下依赖:

dependencies {
    // ZXing 核心库
    implementation("com.google.zxing:core:3.5.3")
    // 相机模块(推荐)
    implementation("com.journeyapps:zxing-android-embedded:4.3.0")
}

如果你使用Kotlin Multiplatform或纯服务端Kotlin(Ktor),只需引入核心模块:

implementation("com.google.zxing:core:3.5.3")

桌面应用(JVM)同理,在Maven或Gradle中添加依赖即可。同步项目后,库即可使用。

3. 快速上手——最小化示例

测试ZXing最简单的方式是启动内置扫描Activity。只需调用Intent即可。以下是Android Activity的Kotlin最小代码:

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions

class MainActivity : AppCompatActivity() {

    // 注册扫描启动合约
    private val barcodeLauncher = registerForActivityResult(ScanContract()) { result ->
        if (result.contents == null) {
            Toast.makeText(this, "扫描已取消", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "扫描结果:${result.contents}", Toast.LENGTH_LONG).show()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 配置扫描选项
        val options = ScanOptions()
        options.setDesiredBarcodeFormats(ScanOptions.QR_CODE) // 仅扫描QR码
        op                    

推荐