直接使用的是华为官方提供的api,封装成一个工具类方便调用。
TypeScript
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')) {
// 定义扫码参数options
let 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('该设备不支持扫码功能')
}
}
使用方法:
TypeScript
Button('打开扫一扫')
.onClick(()=>{
ScanUtil.startScan(getContext())
.then((result)=>{
//成功识别到二维码内容
promptAction.showToast({
message: `result:${result}`,
duration: 3000
})
})
.catch((error:BusinessError)=>{
//一般是模拟器会跑到这里报异常
promptAction.showToast({
message: `error:${error}`,
duration: 3000
})
})
})