1

目录

  • 前言
  • 扫码功能的重要性
  • 扫码功能应用场景
  • 默认界面扫码
  • 开发环境搭建
  • 约束与限制
  • 实现扫码功能
  • 注意事项:模拟器扫码
  • 结束语

前言

在移动端的应用开发中,二维码扫描功能已成为一项常见需求。无论是支付、信息获取还是数据交换,二维码都扮演着不可或缺的角色,扫码功能都扮演着重要角色。随着基于HarmonyOS应用开发的不断发展,HarmonyOS提供了丰富的API,使得开发者能够轻松实现默认扫码功能。那么本文就来详细介绍如何在HarmonyOS应用中实现默认扫码功能,包括环境搭建、扫码界面设计、扫码逻辑实现以及实际应用示例,方便大家了解和使用。

扫码功能的重要性

关于在应用开发中的扫码能力,尤其是自定义扫码功能,它不仅能够提升应用的用户体验,还能增强应用的功能性和互动性。通过自定义扫码,开发者可以根据自己的需求定制扫码界面、处理扫码结果,甚至集成特定的业务逻辑,所以说自定义扫码功能在应用开发中是非常重要的功能。

扫码功能应用场景

先来介绍一下扫码功能在实际应用中的场景,扫码功能可以应用于多种场景,这里分享几个日常开发中常用的使用场景:

  • 支付应用:用户通过扫描商家的二维码进行支付操作。
  • 信息获取:通过扫描二维码获取产品信息或网址链接。
  • 数据交换:在设备之间,通过扫码进行快速交换数据操作。

默认界面扫码

关于HarmonyOS自带的默认界面扫码能力,它提供系统级体验一致的扫码界面,包含相机预览流,相册扫码入口,暗光环境闪光灯开启提示。Scan Kit对系统相机权限进行了预授权,调用接口时,无需开发者再次申请相机权限。适用于不同扫码场景的应用开发。

而且,通过默认界面扫码可以实现应用内的扫码功能,为了应用更好的体验,推荐同时接入“扫码直达”服务,应用可以同时支持系统扫码入口(控制中心扫一扫)和应用内扫码两种方式跳转到指定服务页面。
image.png

开发环境搭建

在开始编码使用之前,先确保已经配置好了HarmonyOS的开发环境,包括但不限于:

  • 安装DevEco Studio:下载并安装HarmonyOS官方的集成开发环境(IDE),尽量下载安装最新版本。
  • 配置SDK:根据实际的目标设备下载并配置相应的SDK。
  • 创建项目:在DevEco Studio中创建一个新的HarmonyOS项目。

约束与限制

关于默认扫码功能的使用,有一定的约束和限制,具体如下所示:

  • 默认界面扫码能力暂不支持悬浮屏、分屏场景。
  • 相册扫码只支持单码识别。
  • 不支持界面UX添加自定义设置。

实现扫码功能

在HarmonyOS中,实现自定义扫码功能主要依赖于customScan这个API,而且本文只介绍自定义界面扫码能力,系统自带扫码功能这里不再过多介绍。下面是实现自定义扫码的关键步骤:

1、导入默认界面扫码模块

scanCore提供扫码类型定义,scanBarcode提供拉起默认界面扫码的方法和参数,导入方法如下:

import { scanCore, scanBarcode } from '@kit.ScanKit';
// 导入默认界面需要的日志模块和错误码模块
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

2、拉起默认扫码界面

通过调用startScanForResult方法拉起默认扫码界面,有两种方式:Promise方式和Callback回调函数方式。
(1)Callback回调函数方式
这里先以通过Callback回调函数得到扫码结果,具体示例代码如下所示:

@Entry
@Component
struct ScanBarCodePage {
  build() {
    Column() {
      Row() {
        Button('Callback with options')
          .backgroundColor('#0D9FFB')
          .fontSize(20)
          .fontColor('#FFFFFF')
          .fontWeight(FontWeight.Normal)
          .align(Alignment.Center)
          .type(ButtonType.Capsule)
          .width('90%')
          .height(40)
          .margin({ top: 5, bottom: 5 })
          .onClick(() => {
            // 定义扫码参数options
            let options: scanBarcode.ScanOptions = {
              scanTypes: [scanCore.ScanType.ALL],
              enableMultiMode: true,
              enableAlbum: true
            };
            try {
              // 可调用getContext接口获取当前页面关联的UIAbilityContext
              scanBarcode.startScanForResult(getContext(this), options,
              (error: BusinessError, result: scanBarcode.ScanResult) => {
                  if (error) {
                   return;
                  }
                  // 解析码值结果跳转应用服务页

              })
            } catch (error) {
            }
          })
      }
      .height('100%')
    }
    .width('100%')
  }
}

(2)Promise方式
第二种方式就是通过Promise方式得到扫码结果,具体示例代码如下所示:

@Entry
@Component
struct ScanBarCodePage {
  build() {
    Column() {
      Row() {
        Button("Promise with options")
          .backgroundColor('#0D9FFB')
          .fontSize(20)
          .fontColor('#FFFFFF')
          .fontWeight(FontWeight.Normal)
          .align(Alignment.Center)
          .type(ButtonType.Capsule)
          .width('90%')
          .height(40)
          .margin({ top: 5, bottom: 5 })
          .onClick(() => {
            // 定义扫码参数options
            let options: scanBarcode.ScanOptions = {
              scanTypes: [scanCore.ScanType.ALL],
              enableMultiMode: true,
              enableAlbum: true
            };
            try {
              // 可调用getContext接口获取当前页面关联的UIAbilityContext
              scanBarcode.startScanForResult(getContext(this), options).then((result: scanBarcode.ScanResult) => {
                // 解析码值结果跳转应用服务页

              }).catch((error: BusinessError) => {
              });
            } catch (error) {
            }
          })
      }
      .height('100%')
    }
    .width('100%')
  }
}

注意事项:模拟器扫码

目前暂不支持模拟器使用,调用会返回错误信息“Emulator is not supported.”所以大家不要用模拟器来测试扫码功能,一定要记住!

结束语

通过本文关于对HarmonyOS提供的扫码功能API的介绍,想必大家都已经了解了在HarmonyOS中实现默认扫码功能的全过程。上面也介绍了从环境搭建到界面设计,再到扫码逻辑的实现,每一步都是构建一个高效、易用扫码功能的关键,我们可以轻松实现默认扫码功能,提升应用的功能性和用户体验。随着HarmonyOS生态的不断发展,默认扫码功能将在更多应用场景中发挥重要作用,本文提供的实战代码示例只是一个小小的开始,大家可以根据具体需求进行扩展和优化,创造出更加丰富和智能的扫码体验。


灵芸小骏
7.5k 声望378 粉丝

移动开发者。