使用 SDK

本文介绍如何在 HarmonyOS NEXT 中使用相关 SDK。

权限添加

entrymodule.json5 中添加相机权限。

"requestPermissions": [
      {
        "name": "ohos.permission.CAMERA",
        "reason": "$string:permission_reason_camera",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      }
]

API 使用

默认 UI

实现 ScanInterface 接口

import { ScanInterface } from '@mpaas/scanapp';

const params: Map<string, Object> = new Map()

params.set('showAlbum', true) //是否显示相册入口
params.set('open','轻触照亮')  // 环境提示文案 不超过4个字符
params.set('close','轻触关闭') // 环境提示文案 不超过4个字符
params.set('more','多码识别')  // 多码识别提示文案
params.set('targetColor',Color.Red) // 命中二维码后 效果颜色
params.set('fullScreen',true) //是否开启全屏渲染

class ScanDefault implements ScanInterface {
  getResult(result: string): void { // 获取扫码结果
    try {
      promptAction.showDialog({
        message: result,
      })
    } catch (error) {
      console.error('start fail error = ' + JSON.stringify(error))
    }
    处理路由逻辑
    router.back() || router.pushUrl()
  }

  customParams?: Map<string, Object> | undefined = params

} 

实现 ScanManager

import { ScanManager } from '@mpaas/scanapp';

跳转前对 ScanManager 初始化
ScanManager.defaultManager(new ScanDefault())

引入 Scan 组件

在组件外调用
import ('@mpaas/scanapp/Index') 

跳转扫一扫页面

router.pushNamedRoute({name: 'mPaasScanPage'})
重要

这里使用 router 的自定义 page name 的形式跳转,目前写死的扫一扫组件 URL 为 mPaasScanPage

自定义 UI 页面

引入 Scan 组件

import { MyRect, ScanCustomPage, WrapperDecodeResult } from '@mpaas/scanapp'

使用

  RelativeContainer() {
    ScanCustomPage({
      scanCallback: this.handleResult, //获取扫描结果的自定义方法
      customUi: true, // 识别后展示自定义结果页,false时展示默认结果
      flashIsOn:this.flashIsOn, // 闪光灯监控
      customRect: new MyRect(100,300,200,200), // 自定义识别区域裁剪
      jumpToAlbum: this.jumpToAlbum, // 跳转相册监听
      setupCamera: this.setupCamera, // 连续识别监听
    })
  }


  handleResult = (results: Array<WrapperDecodeResult>) => { //识别结果为多码数组
    try {
      promptAction.showDialog({
        message: results[0].codeContent,
      })
    } catch (error) {
      console.error('start fail error = ' + JSON.stringify(error))
    }
    this.setupCamera = !this.setupCamera //开启连续识别,不开启时请不要传递setupCamera参数
  }


customRect: new MyRect(100,300,200,200), // 自定义识别区域裁剪
以手机屏幕为标准MyRect(x,y,width,height) 
x,y为裁剪框左上角原点的屏幕坐标