快速集成(Harmony)

最近更新时间:2025-11-24 11:22:11

我的收藏



开发准备

1. 注册腾讯云账号,提交智能扫码服务的申请(申请地址),等待审核通过后,获得专属密钥。
2. 从 SDK 下载链接中下载智能扫码 SDK 到本地准备集成。

申请授权需要填写 App 包名和签名文件签名,需通过以下方法获取:
let info = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_SIGNATURE_INFO)
info.name // 包名
info.signatureInfo.fingerprint // 签名
注意:
签名与签名文件相关,调试和发布会有不同,使用时请注意区分。


Harmony 端智能扫码 SDK 接入流程

SDK 介绍

SDK 文件:为 cloudqbar_v1.x.x_datetime_buildid.har,该文件里面封装了智能扫码接口。
功能:提供实时识别一维码、二维码和图片内的一维码、二维码检测识别的服务。


环境依赖

Harmony 端智能扫码 SDK 适用于5.0.0(12) 及以上版本。


接入步骤

1. 将 har 包添加到工程文件中的 libs 目录下。
2. 配置依赖。在您的工程文件 oh-package.json5 进行如下配置:
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
"cloudqbar": "file:libs/cloudqbar_vdevelop_20250425_f064e07.har"
}
}
注意:
cloudqbar_vdevelop_20250425_f064e07.har 需根据实际的 har 包名称替换。


SDK 接口说明

摄像头数据实时识别

创建 QBar 控制器
QBar 控制器会将识别任务和控制器的 promise 关联,识别正常结束则 promise 正常停止,否则错误将通过 promise 的异常抛出。
控制器需要设置模式为 MODE_VIDEO_CONTINUE 或 MODE_VIDEO_ONCE 进行实时识别。
MODE_VIDEO_CONTINUE 模式:每次识别的结果通过 onInfo 回调,无论是否识别到二维码都不会结束,需要业务调用 done 函数结束识别。
_ctl: QBarController = QBarController.create({
mode: QBarMode.MODE_VIDEO_CONTINUE, listener: {
onZoom: (val) => {
// 缩放处理
},
onInfo: (val) => {
// 识别信息处理
}
}
})

MODE_VIDEO_ONCE 模式:识别到二维码将自动结束,并将识别结果通过 promise 的返回值返回。

传入摄像头数据
调用此接口将摄像头获取的数据传入到 Qbar 控制器,仅支持格式为 NV21 的数据。
this._ctl.scan(processImg.data, processImg.width, processImg.height)

停止识别
上层业务需要停止时调用此方法结束识别,此时 promise 正常结束。
this._ctl.done()

错误处理
识别过程中的异常通过 promise 抛出。
this._ctl.promise.catch((err: BusinessError) => {
promptAction.showToast({
message: json.stringify(err)
})
})


传入图片识别

创建 QBar 控制器
控制器需要设置模式为 MODE_FILE。
let ctl = QBarController.create({ mode: QBarMode.MODE_FILE, listener: {} })

传入图片数据
调用此接口将摄像头获取的数据传入到 Qbar 控制器,仅支持格式为 NV21 的数据。
ctl.scan(buf, info.size.width, info.size.height)

获取识别结果
正常识别结果从 promise 返回,识别过程中的异常通过 promise 抛出到业务层。
let ret = await ctl.promise


默认扫描界面识别

由于鸿蒙支持 router 和 navigation 两种不同的模式展示页面,默认界面通过 component 提供给业务层集成。

由于 router 和 navigation 模式不同,使用时需业务层在 onBack 根据不同模式实现页面退出逻辑。
QBarView({
onBack: () => {
// 响应返回按钮
},
onDone: (ret) => {
// 处理识别结果
},
onError: (err) => {
// 处理错误
},
})