美文网首页鸿蒙(HarmonyOS)开发知识@IT·互联网
HarmonyOS 开发-折叠屏扫描二维码方案

HarmonyOS 开发-折叠屏扫描二维码方案

作者: 迪士尼在逃程序员 | 来源:发表于2024-08-21 16:51 被阅读0次

介绍

本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan,其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusChange事件实现。

效果图预览

使用说明

  1. 用户授权相机扫码。
  2. 对准二维码即可识别展示,支持多二维码识别。
  3. 支持打开相机闪光灯。
  4. 折叠态不同,相机流的尺寸也不同,因此折叠态变更时,扫码服务会重新初始化。

实现思路

  1. 相机权限需要用户授权。
// 向用户申请授权
let context = getContext() as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
let grantStatusArr = await atManager.requestPermissionsFromUser(context, [ 'ohos.permission.CAMERA' ]);
const grantStatus = grantStatusArr.authResults[0];
  1. 依赖XComponent展示相机流内容,在加载完相机流后启动相机扫码服务。
// TODO:知识点:相机流显示依赖XComponent
XComponent({
  id: CommonConstants.CAMERA_XCOMPONENT_ID,
  type: CommonConstants.CAMERA_XCOMPONENT_TYPE,
  controller: this.cameraSurfaceController
})
  .onLoad(() => {
    // TODO:知识点:customScan依赖XComponent组件的surfaceId,对图像进行扫描
    this.customScanVM.surfaceId = this.cameraSurfaceController.getXComponentSurfaceId();
    // TODO:知识点:XComponent加载完成后,启动相机进行扫码
    this.customScanVM.startCustomScan();
  })
  1. 二维码识别通过customScan系统能力在启动扫描之后,通过异步任务监控相机图像,对识别到的内容直接返回处理。
try {
  const viewControl: customScan.ViewControl = {
    width: this.cameraCompWidth,
    height: this.cameraCompHeight,
    surfaceId: this.surfaceId
  };
  customScan.start(viewControl)
    .then((result: Array<scanBarcode.ScanResult>) => {
      // 处理扫码结果
      this.showScanResult(result);
    })
} catch (error) {
  logger.error('start fail, error: %{public}s ', JSON.stringify(error));
}
  1. 识别到的数据为一个结果数组,每一个结果包括识别到的码源信息和二维码图像所在屏幕的坐标
let showMsg: string = '';
// 处理扫码结果
scanResult.forEach((result: scanBarcode.ScanResult) => {
  // 码源信息
  const originalValue: string = result.originalValue;
  // 二维码在屏幕上的位置
  const scanCodeRect: scanBarcode.ScanCodeRect | undefined = result.scanCodeRect;

  if (scanCodeRect) {
    showMsg += `内容: ${originalValue}\n坐标: ${JSON.stringify(scanCodeRect)}\n`;
  }
})
  1. 折叠屏设备上,依赖display的屏幕状态事件,监听屏幕折叠状态变更,通过对折叠状态的分析,更新XComponent尺寸并重新启动扫码服务。
display.on('foldStatusChange', async (curFoldStatus: display.FoldStatus) => {
  // 同一个状态重复触发不做处理
  if (this.curFoldStatus === curFoldStatus) {
    return;
  }

  // 缓存当前折叠状态
  this.curFoldStatus = curFoldStatus;

  if (this.curFoldStatus === display.FoldStatus.FOLD_STATUS_EXPANDED
    || this.curFoldStatus === display.FoldStatus.FOLD_STATUS_FOLDED) {
    // 当前没有相机流资源,只更新相机流宽高设置
    if (!this.surfaceId) {
      this.updateCameraCompSize();
      return;
    }

    // 关闭闪光灯
    this.tryCloseFlashLight();
    setTimeout(() => {
      // 释放扫码资源
      this.releaseCustomScan();
      // 重新启动扫码
      this.restartCustomScan();
    }, 10)
  }
})

工程结构&模块类型

   customscan                           // har类型
   |---common
   |   |---constants
   |   |    |---CommonConstants.ets     // 通用常量
   |---components
   |   |---CustomScanCameraComp.ets     // 自定义组件-二维码扫描相机流组件
   |   |---CustomScanCtrlComp.ets       // 自定义组件-二维码扫描控制菜单组件
   |---model
   |   |---PermissionModel.ets          // 模型层-权限控制管理器
   |   |---WindowModel.ets              // 模型层-窗口管理器 
   |---pages
   |   |---CustomScanPage.ets           // 展示层-二维码扫描页面 
   |---viewmodel
   |   |---CustomScanViewModel.ets      // 控制层-二维码扫描控制器

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习知识点,请移步前往小编:https://gitee.com/MNxiaona/733GH/blob/master/jianshu

相关文章

  • 华为折叠屏适配

    华为折叠屏适配方案:华为在大屏设备上有系统级别的支持方案,华为平行视界,能够支持折叠屏分屏显示 华为折叠屏分屏显示...

  • iOS开发:二维码扫描与生成(扫描篇)

    iOS开发中经常要用到生成二维码与扫描二维码的功能,iOS7开始,系统支持原生的扫描二维码,iOS7 扫描二维码可...

  • iOS 二维码扫描

    iOS开发中 二维码扫描 前言 在移动开发中二维码扫描这种事情越来越常见了,在iOS中我选择了用ZBar这个第三方...

  • IOS 二维码扫描 横竖屏切换

    Swift4 二维码扫描 支持横竖屏切换 网上二维码扫描的轮子实在是太多了,为啥还要自己写呢?实在是因为没有找到合...

  • 优惠券制作平台

    微信扫描下面二维码领取优惠券,同时查看自身如何制作方案。

  • 记HarmonyOS FA 半屏Ability拉起全屏Abili

    关于Ability的半屏、全屏等模式的配置请参考我另一篇文章:HarmonyOS(鸿蒙)应用/服务开发window...

  • HarmonyOS应用开发

    HarmonyOS官方开发文档地址:https://www.harmonyos.com/cn/develop[ht...

  • 你不强忍,怎么天生强大

    2月24日, 华为在西班牙巴塞罗那召开发布会, 首次推出5G折叠屏手机Mate X, 耗时3年终于实现了折叠屏“无...

  • HarmonyOS开发 C++中打印日志

    在HarmonyOS应用开发中打印日志很简单,HarmonyOS提供了HiLog日志系统,帮助开发者了解应用/服务...

  • iOS APP原生一维码、二维码扫描使用介绍

    在app开发中,经常会遇到二维码扫描的功能。 今天我给大家介绍一下,iOS原生一维码、二维码扫描使用。简单实用 话...

网友评论

    本文标题:HarmonyOS 开发-折叠屏扫描二维码方案

    本文链接:https://www.haomeiwen.com/subject/xukxxjtx.html