首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

免弹窗、预授权,默认界面扫码能力打造系统级扫码体验

编程知识
2024年09月18日 13:16

二维码如今是移动应用流量入口以及功能实现的重要工具,也是各App的流量入口,使用场景愈加丰富,广泛应用于支付、出行、餐饮、生活服务、智慧生活、零售及广告营销等主流场景。

然而,在实际生活中,扫码环境如光照强度、扫码角度、距离等,相机功能如缩放、对焦、曝光等和码图本身完整程度、弯曲程度等很大程度上会影响用户的扫码体验。

HarmonyOS SDK 统一扫码服务(Scan Kit)作为软硬协同的系统级扫码服务,帮助开发者的应用快速构建面向各种场景的码图识别和生成能力。统一扫码服务应用了多项计算机视觉技术和AI算法技术,不仅实现了远距离自动扫码,同时还针对多种复杂扫码场景(如暗光、污损、模糊、小角度、曲面码等)做了识别优化,实现远距离码或小型码的检测和自动放大,提升扫码成功率与用户体验。

image

image

其中统一扫码服务的默认界面扫码能力提供系统级体验一致的扫码界面,包含相机预览流,相册扫码入口,暗光环境闪光灯开启提示,支持单码和多码识别,具备相机预授权,调用接口时,无需开发者再次申请相机权限。适用于不同扫码场景的应用开发。

能力优势

接入简单:一行代码,接入简单;系统级接口,包体0增加。

免弹窗:系统相机权限预授权,保护用户信息安全。

识别率高:应用多项CV技术,提升扫码成功率和速度。

识别距离远:应用端侧AI算法技术,实现远距离识码。

业务流程

image

开发步骤

统一扫码服务提供了默认界面扫码的能力,由扫码接口直接控制相机实现最优的相机放大控制、自适应的曝光调节、自适应对焦调节等操作,保障流畅的扫码体验,减少开发者的工作量。

以下示例为调用Scan Kit的startScanForResult接口跳转扫码页面。

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

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

2.调用startScanForResult方法拉起默认扫码界面。

通过Promise方式得到扫码结果。

[@Entry](https://my.oschina.net/u/4127701)
[@Component](https://my.oschina.net/u/3907912)
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
            };
            // 可调用getContext接口获取当前页面关联的UIAbilityContext
            scanBarcode.startScanForResult(getContext(this), options).then((result: scanBarcode.ScanResult) => {
              // 收到扫码结果后返回
              hilog.info(0x0001, '[Scan CPSample]', `Succeeded in getting ScanResult by promise with options, result is ${JSON.stringify(result)}`);
            }).catch((error: BusinessError) => {
              hilog.error(0x0001, '[Scan CPSample]',
                `Failed to get ScanResult by promise with options. Code:${error.code}, message: ${error.message}`);
            });
          })
      }
      .height('100%')
    }
    .width('100%')
  }
}

通过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
            };
            // 可调用getContext接口获取当前页面关联的UIAbilityContext
            scanBarcode.startScanForResult(getContext(this), options,
              (error: BusinessError, result: scanBarcode.ScanResult) => {
                if (error) {
                  hilog.error(0x0001, '[Scan CPSample]',
                    `Failed to get ScanResult by callback with options. Code: ${error.code}, message: ${error.message}`);
                  return;
                }
                // 收到扫码结果后返回
                hilog.info(0x0001, '[Scan CPSample]', `Succeeded in getting ScanResult by callback with options, result is ${JSON.stringify(result)}`);
              })
          })
      }
      .height('100%')
    }
    .width('100%')
  }
}

了解更多详情>>

访问统一扫码服务联盟官网

获取默认界面扫码服务开发指导文档

From:https://www.cnblogs.com/HarmonyOSSDK/p/18418394
本文地址: http://www.shuzixingkong.net/article/2104
0评论
提交 加载更多评论
其他文章 SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24
无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私、安全和专有风险。在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式,在预训练教师网络指导下实时训练生成对抗网络来合成一个大规模的样本集用于知识蒸馏。论文重新审视了这种常
SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24 SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24 SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24
一文带你精通二项式反演!不服来看!
前言 原题:《二项式反演学习笔记》。 这里有我关于二项式反演的一些思考和领会,包含理论推导和在信息学竞赛中的应用。网络上的教程都太潦草了,难以深入理解。因此,这里将以详细的证明为主,介绍二项式反演在 OI 中的使用。 如果你只想快速浏览结论,可以点击这里查看结论。 概述 反演是一种将两个函数 \(f
一文带你精通二项式反演!不服来看!
.net core8 使用JWT鉴权(附当前源码)
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。 该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。 说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 结合上一篇文章使用,味道更佳:.net
.net core8 使用JWT鉴权(附当前源码) .net core8 使用JWT鉴权(附当前源码) .net core8 使用JWT鉴权(附当前源码)
Canvas简历编辑器-Monorepo+Rspack工程实践
Canvas简历编辑器-Monorepo+Rspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践。在之前的文中我也提到过,因为是本着学习的态度以及对技术的好奇心来做的,所以除了一些工具类的库例如 ArcoDesign、ResizeObserve
火山引擎数智平台:高性能ChatBI的技术解读和落地实践
导读:大模型能力的发展和成熟,催生出新一代智能化 BI—— ChatBI,即通过自然语言处理(NLP)与大型语言模型(LLMs)的结合,极大简化数据分析过程,提高效率并降低分析门槛。火山引擎数智平台旗下智能数据洞察产品 DataWind 近期上线 ChatBI 能力,提供智能修复、多语法适用等能力,
火山引擎数智平台:高性能ChatBI的技术解读和落地实践 火山引擎数智平台:高性能ChatBI的技术解读和落地实践 火山引擎数智平台:高性能ChatBI的技术解读和落地实践
高效打造跨平台桌面应用:Electron加载服务器端JS
在现代桌面应用开发中,使用 Electron 加载远程服务器托管的前端资源,再与本地 API 交互,能够带来灵活的部署和强大的本地功能支持。这种方式不仅提升了开发效率,还能充分利用 PC 端的资源和性能。 本文将深入解析如何使用 Electron 实现这一架构,并探讨其背后的关键技术,包括 ipcM
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
#!/bin/bash # Cross-compile environment for Android on ARM64 and x86 # # Contents licensed under the terms of the OpenSSL license # http://www.openssl
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo
前言 Osg需要打开模型文件,但是遇到显示动力学仿真的K模型文件,.k文件是一种描述材料属性的文件,比如密度、弹性模量等,该模型文件不是常规中间开放格式,无法直接支持,需要自定义解析并且重建三维模型。 Demo 实际非常流程,因为视频转gif导致部分看起来不行: 交互流畅性测试 实际研发需要用不同的
OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo OSG开发笔记(三十):OSG加载动力学仿真K模型文件以及测试Demo