一、加入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