google扫码库barcode-scanning的使用

本文介绍了如何在Android应用中集成GoogleMLKit的barcode-scanning库,实现扫码分析功能,并在ScannerActivity中调用相机进行扫码。作者展示了如何设置扫码类型、处理扫描结果以及请求和管理相机权限。

一、加入barcode-scanning库

//捆绑模式扫码
implementation 'com.google.mlkit:barcode-scanning:17.1.0'

二、编写扫码分析类,用于分析扫码数据并回调方法返回结果

package com.gnetek.monitor.adapter

import android.util.Log
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
import com.google.mlkit.vision.barcode.BarcodeScanning
import com.google.mlkit.vision.barcode.common.Barcode
import com.google.mlkit.vision.common.InputImage

/**
 * @Description 扫码分析器
 * @Author Darren Huang
 * @Date 2023-06-14 10:57
 */
class QRCodeAnalyzer(private val listener: (List<Barcode>) ->Unit) : ImageAnalysis.Analyzer {
    companion object {
        private const val TAG = "QRCodeAnalyzer"
    }

    @androidx.annotation.OptIn(androidx.camera.core.ExperimentalGetImage::class)
    override fun analyze(imageProxy: ImageProxy) {
        val image = imageProxy.image
        image?.let {
            val inputImage = InputImage.fromMediaImage(it, imageProxy.imageInfo.rotationDegrees)
            processImage(inputImage, imageProxy)
        }
    }

    //设置扫码类型,支持同时设置多个
    private val options = BarcodeScannerOptions.Builder()
        .setBarcodeFormats(Barcode.FORMAT_CODE_128)//条形码
//        .setBarcodeFormats(Barcode.FORMAT_QR_CODE)//二维码
        .build()
    private val scanner = BarcodeScanning.getClient(options)

    private fun processImage(image: InputImage, imageProxy: ImageProxy) {
        scanner.process(image)
            .addOnSuccessListener(listener)
            .addOnFailureListener {
                Log.e(TAG, "processImage: ${it.message}")
            }
            .addOnCompleteListener {
                imageProxy.close()
            }
    }
}

三、扫码的activity,调用相机

package com.gnetek.monitor.ui.activity

import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值