直接使用的是华为官方提供的api,封装成一个工具类方便调用。
import { common } from '@kit.AbilityKit';
import { scanBarcode, scanCore } from '@kit.ScanKit';export namespace ScanUtil {export async function startScan(context: common.Context) : Promise<string> {if (canIUse('SystemCapability.Multimedia.Scan.Core')) {// 定义扫码参数optionslet options: scanBarcode.ScanOptions = {scanTypes: [scanCore.ScanType.ALL],enableMultiMode: true,enableAlbum: true};if (canIUse('SystemCapability.Multimedia.Scan.ScanBarcode')) {let result: scanBarcode.ScanResult = await scanBarcode.startScanForResult(context, options)return result.originalValue}}throw new Error('该设备不支持扫码功能')}
}
使用方法:
Button('打开扫一扫').onClick(()=>{ScanUtil.startScan(getContext()).then((result)=>{//成功识别到二维码内容promptAction.showToast({message: `result:${result}`,duration: 3000})}).catch((error:BusinessError)=>{//一般是模拟器会跑到这里报异常promptAction.showToast({message: `error:${error}`,duration: 3000})})})