首页 > 其他分享 >免弹窗、预授权,默认界面扫码能力打造系统级扫码体验

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

时间:2024-09-18 14:13:33浏览次数:8  
标签:扫码 界面 默认 scanBarcode error options 弹窗

二维码如今是移动应用流量入口以及功能实现的重要工具,也是各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%')
  }
}

了解更多详情>>

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

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

标签:扫码,界面,默认,scanBarcode,error,options,弹窗
From: https://www.cnblogs.com/HarmonyOSSDK/p/18418394

相关文章

  • zblog php版修改默认后台错误页后登录后台跳转错误
    如果您在修改了Z-BlogPHP版本的默认后台错误页之后遇到了登录后台时跳转错误的问题,这可能是因为修改操作影响了登录流程或者错误处理机制。以下是一些可能的原因及解决方法:1.检查错误页修改问题描述:修改错误页后导致跳转逻辑出错。解决方法:回滚错误页的修改,使用备份的原......
  • Linux修改进入终端的默认地址
    1:进入到要修改的用户目录下,我要修改root的,我进入到root目录下cdroot/进入目录后,发现目录下只有anaconda-ks.cfg配置文件,没有.bashrc文件,因为这个文件是隐藏的 2:我们执行编辑文件命令vim.bashrc  3:在文件中添加cd命令:例如,添加以下行以设置默认路径:cd/you......
  • PGSQL-autovacuum ,pg默认开启自动清理,表膨胀问题
    在配置文件中 [root@s101/var/lib/pgsql/13/data]#nanopostgresql.conf#AUTOVACUUM#------------------------------------------------------------------------------#autovacuum=on#Enableautovacuumsubprocess?'on'......
  • 编程日记 更改redis存储默认序列化器
    编程日记更改redis存储默认序列化器packagecom.haole.usercenter.service;importcom.haole.usercenter.model.domain.User;importjakarta.annotation.Resource;importorg.junit.jupiter.api.Assertions;importorg.junit.jupiter.api.Test;importorg.springframework......
  • C#实现扫码枪串口通信(利用serialPort控件重写)
     1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.IO.Ports;7usingSystem.Linq;8usingSystem.Text;9usingSystem.Threading.Tasks;10usi......
  • Android13 屏蔽ANR和Crash弹窗
    前言Android系统在应用发生Crash/ANR的时候,总会弹出一个提示对话框,但是现在部分客户不想要这样的对话框,要求移除一、ApplicationCrash表现:程序崩溃或闪退,界面上通常会出现“应用已停止运行”的提示。常见原因(Java异常):错误类型详细描述NullPointerException尝试在需要......
  • C#实现扫码枪串口通信
     usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO.Ports;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWind......
  • Java 8默认垃圾回收器
    Java8作为Java语言的重要里程碑,不仅引入了Lambda表达式、StreamAPI等新特性,还在垃圾回收(GarbageCollection,GC)方面继续沿用了Java7的策略,但同时也提供了新的垃圾回收器选项。在本文中,我们将深入探讨Java8的默认垃圾回收器以及如何查看和理解相关的JVM参数。Java8默认垃圾回......
  • 帝国cms默认密码怎么改回来
    要将帝国CMS的默认密码改回,可以通过数据库直接修改密码。以下是一些步骤来指导你如何操作:对于帝国CMS5.0及更低版本登录数据库:使用数据库管理工具(如phpMyAdmin或Navicat)登录管理帝国CMS数据库。查找用户表:在数据库中找到名为phome_enewsuser的表,该表存储了用户相关......
  • AbortPolicy(默认策略)
    1.AbortPolicy(默认策略)特点:当任务无法被线程池执行时,会抛出一个RejectedExecutionException异常。使用场景:适用于对任务丢失敏感的场景,当线程池无法接受新任务时,希望立即知道并处理该异常。示例代码:importjava.util.concurrent.*;publicclassAbortPolicyDemo{  publicsta......