开发准备
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) => {// 处理错误},})