| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 15 天前 | ||
| 2 个月前 | ||
| 2 个月前 |
统一扫码服务
介绍
本示例展示了使用统一扫码提供的“扫码直达”服务、默认界面扫码能力、自定义界面扫码能力、图像识码能力、码图生成能力。
效果预览
| 扫码直达页面 | 应用首页 | 码图生成页面 | 默认界面扫码页面 | 自定义界面扫码页面 | 本地图片识码页面 |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
使用说明:
-
本Demo接入“扫码直达服务”仅作示例参考和效果展示。
- 扫码直达不支持华为智能穿戴。
- 安装本Demo, 打开HarmonyOS扫码入口(控制中心扫码入口),扫描下面二维码,扫码成功后会拉起本Demo的直达服务页。

- 若您要替换自己的包名和域名接入“扫码直达服务”,请参考接入“扫码直达”服务。
-
在手机的主屏幕,点击“统一扫码示例”,启动应用,在主界面可见“码图生成”、默认界面扫码”、“自定义界面扫码”、“图像识码”按钮。
-
点击“码图生成”按钮,进入二级界面,可根据需求选择“通过文本生成码图Promise”、“通过文本生成码图Callback”或“通过字节数组生成码图”按钮生成码图。
-
点击“默认界面扫码”按钮,进入二级界面,可根据需求选择“默认界面扫码Promise”、“默认界面扫码Callback”按钮拉起默认界面扫码。
-
点击“自定义界面扫码”按钮,进入二级界面,可根据需求选择“自定义界面扫码Promise”、“自定义界面扫码Callback”按钮拉起自定义界面扫码。
-
点击“图像识码”按钮,进入二级界面,可根据需求选择“识别本地图片Promise”、“识别本地图片Callback”按钮识别本地图片。
-
识别图像数据中的码图,需要先使用Camera Kit启动相机能力,实现双路预览功能,具体实现详见双路预览,再通过ImageReceiver实时获取预览图像数据,调用detectBarcode.decodeImage接口解析图像数据,具体实现详见DetectImageData.ets。
-
自定义界面扫码如何连续扫码,具体实现详见RescanDemo.ets。
-
自定义界面扫码如何增加重试机制,具体实现详见RetryDemo.ets。
-
如何将码图背景颜色设置成透明色,具体实现详见BackgroundColorTransparentDemo.ets。
工程目录
├── entry/src/main/ets
│ ├── entryability
│ │ └── EntryAbility.ets // 程序入口类
│ ├── pages
│ │ ├── customScan
│ │ │ ├── CustomScan.ets // 自定义界面扫码主页面
│ │ │ ├── CustomScanCallback.ets // 基于Callback的自定义界面扫码实现
│ │ │ └── CustomScanPromise.ets // 基于Promise的自定义界面扫码实现
│ │ ├── defaultScan
│ │ │ ├── DefaultScan.ets // 默认界面扫码主页面
│ │ │ ├── DefaultScanCallback.ets // 基于Callback的默认界面扫码实现
│ │ │ └── DefaultScanPromise.ets // 基于Promise的默认界面扫码实现
│ │ ├── detectBarcode
│ │ │ ├── DetectBarcode.ets // 图片识码主页面
│ │ │ ├── DetectBarcodeCallback.ets // 基于Callback的图片识别实现
│ │ │ ├── DetectBarcodePromise.ets // 基于Promise的图片识别实现
│ │ │ └── DetectImageData.ets // 识别图像数据中的码图
│ │ ├──faq
│ │ │ ├── BackgroundColorTransparentDemo.ets // 码图背景颜色设置成透明色
│ │ │ ├── RescanDemo.ets // 连续扫码实现
│ │ │ └── RetryDemo.ets // 重试机制实现
│ │ └── generateBarcode
│ │ │ ├── GenerateBarcode.ets // 码图生成主页面
│ │ │ ├── GenerateBarcodeByByteArray.ets // 基于字节数组的码图生成实现
│ │ │ ├── GenerateBarcodeCallback.ets // 基于Callback的码图生成实现
│ │ │ └── GenerateBarcodePromise.ets // 基于Promise的码图生成实现
│ │ ├── Access.ets // 扫码直达服务界面
│ │ └──Index.ets // 选择功能入口首页
│ └── entry/src/main/resources // 资源文件目录
具体实现
-
接入“扫码直达服务”:开发者将域名注册到“扫码直达”服务后,用户可通过控制中心等系统级的常驻入口,扫应用的二维码、条形码并跳转到应用对应服务页,实现一步直达服务的体验。
- 本Demo接入“扫码直达服务”仅作示例参考,具体接入流程请参考接入“扫码直达”服务。
-
码图生成:将字符串或字节数组转换为自定义格式的码图。 在import { generateBarcode } from '@kit.ScanKit';定义了码图生成API:
- createBarcode(content: string, options: CreateOptions): Promise<image.PixelMap>
- createBarcode(content: string, options: CreateOptions, callback: AsyncCallback<image.PixelMap>): void
- createBarcode(content: ArrayBuffer, options: CreateOptions): Promise<image.PixelMap>
-
默认界面扫码:提供系统级体验一致的扫码界面,包含相机预览流,相册扫码入口,暗光环境闪光灯开启提示,具备相机预授权,集成简单,适用于通用扫码场景。 在import { scanCore, scanBarcode } from '@kit.ScanKit';定义了默认界面扫码API:
- startScanForResult(context: common.Context, options?: ScanOptions): Promise<ScanResult>
- startScanForResult(context: common.Context, options: ScanOptions, callback: AsyncCallback<ScanResult>): void
- startScanForResult(context: common.Context, callback: AsyncCallback<ScanResult>): void
-
自定义界面扫码:提供扫码能力并支持在指定控件上渲染相机预览流,需要开发者实现扫码界面,申请相机权限,适用于对扫码界面有个性化定制的场景。 在import { customScan } from '@kit.ScanKit';定义了自定义界面扫码API:
- init(options?: scanBarcode.ScanOptions): void
- start(viewControl: ViewControl): Promise<Array<scanBarcode.ScanResult>>
- stop(): Promise<void>
- release(): Promise<void>
- start(viewControl: ViewControl, callback: AsyncCallback<Array<scanBarcode.ScanResult>>, frameCallback?: AsyncCallback<ScanFrame>): void
- getFlashLightStatus(): boolean
- openFlashLight(): void
- closeFlashLight(): void
- setZoom(zoomValue : number): void
- getZoom(): number
- setFocusPoint(point: scanBarcode.Point): void
- resetFocus(): void
- rescan(): void
- stop(callback: AsyncCallback<void>): void
- release(callback: AsyncCallback<void>): void
- on(type: 'lightingFlash', callback: AsyncCallback<boolean>): void
- off(type: 'lightingFlash', callback?: AsyncCallback<boolean>): void
-
图像识码:对图库中的码图或图像数据进行扫描识别。 在import { detectBarcode } from '@kit.ScanKit';定义了图像识码API:
- decode(inputImage: InputImage, options?: scanBarcode.ScanOptions): Promise<Array<scanBarcode.ScanResult>>
- decode(inputImage: InputImage, options: scanBarcode.ScanOptions, callback: AsyncCallback<Array< scanBarcode.ScanResult>>): void
- decode(inputImage: InputImage, callback: AsyncCallback<Array<scanBarcode.ScanResult>>): void
- decodeImage(image: ByteImage, options?: scanBarcode.ScanOptions): Promise<DetectResult>
相关权限
自定义界面扫码功能获取相机权限: ohos.permission.CAMERA。
依赖
依赖设备具备相机能力。
约束与限制
- 本实例仅支持标准系统上运行,支持设备:华为手机。
- HarmonyOS系统:HarmonyOS 6.1.0 Release及以上。
- DevEco Studio版本:DevEco Studio 6.1.0 Release及以上。
- HarmonyOS SDK版本:HarmonyOS 6.1.0 Release SDK及以上。





