文件最后提交记录最后更新时间
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
15 天前
2 个月前
2 个月前
README

统一扫码服务

介绍

本示例展示了使用统一扫码提供的“扫码直达”服务、默认界面扫码能力、自定义界面扫码能力、图像识码能力、码图生成能力。

效果预览

扫码直达页面 应用首页 码图生成页面 默认界面扫码页面 自定义界面扫码页面 本地图片识码页面

使用说明:

  1. 本Demo接入“扫码直达服务”仅作示例参考和效果展示。

    • 扫码直达不支持华为智能穿戴。
    • 安装本Demo, 打开HarmonyOS扫码入口(控制中心扫码入口),扫描下面二维码,扫码成功后会拉起本Demo的直达服务页。

  2. 在手机的主屏幕,点击“统一扫码示例”,启动应用,在主界面可见“码图生成”、默认界面扫码”、“自定义界面扫码”、“图像识码”按钮。

  3. 点击“码图生成”按钮,进入二级界面,可根据需求选择“通过文本生成码图Promise”、“通过文本生成码图Callback”或“通过字节数组生成码图”按钮生成码图。

  4. 点击“默认界面扫码”按钮,进入二级界面,可根据需求选择“默认界面扫码Promise”、“默认界面扫码Callback”按钮拉起默认界面扫码。

  5. 点击“自定义界面扫码”按钮,进入二级界面,可根据需求选择“自定义界面扫码Promise”、“自定义界面扫码Callback”按钮拉起自定义界面扫码。

  6. 点击“图像识码”按钮,进入二级界面,可根据需求选择“识别本地图片Promise”、“识别本地图片Callback”按钮识别本地图片。

  7. 识别图像数据中的码图,需要先使用Camera Kit启动相机能力,实现双路预览功能,具体实现详见双路预览,再通过ImageReceiver实时获取预览图像数据,调用detectBarcode.decodeImage接口解析图像数据,具体实现详见DetectImageData.ets。

  8. 自定义界面扫码如何连续扫码,具体实现详见RescanDemo.ets。

  9. 自定义界面扫码如何增加重试机制,具体实现详见RetryDemo.ets。

  10. 如何将码图背景颜色设置成透明色,具体实现详见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 // 资源文件目录

具体实现

  1. 接入“扫码直达服务”:开发者将域名注册到“扫码直达”服务后,用户可通过控制中心等系统级的常驻入口,扫应用的二维码、条形码并跳转到应用对应服务页,实现一步直达服务的体验。

  2. 码图生成:将字符串或字节数组转换为自定义格式的码图。 在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>
  3. 默认界面扫码:提供系统级体验一致的扫码界面,包含相机预览流,相册扫码入口,暗光环境闪光灯开启提示,具备相机预授权,集成简单,适用于通用扫码场景。 在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
  4. 自定义界面扫码:提供扫码能力并支持在指定控件上渲染相机预览流,需要开发者实现扫码界面,申请相机权限,适用于对扫码界面有个性化定制的场景。 在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
  5. 图像识码:对图库中的码图或图像数据进行扫描识别。 在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。

依赖

依赖设备具备相机能力。

约束与限制

  1. 本实例仅支持标准系统上运行,支持设备:华为手机。
  2. HarmonyOS系统:HarmonyOS 6.1.0 Release及以上。
  3. DevEco Studio版本:DevEco Studio 6.1.0 Release及以上。
  4. HarmonyOS SDK版本:HarmonyOS 6.1.0 Release SDK及以上。