基于鸿蒙Next模拟扫图识物的一个过程

一、功能介绍(基础)

基于鸿蒙Next模拟扫图识物的一个过程,扫描到图片,提示出相关的图片内容,是一个什么东西。

二、使用场景(大类)

支付、社交、信息获取、在线调查、教育学习等等。

三、实现步骤:

第一步:上传图片,打开相册时,会有获取媒体权限的弹窗询问。

第二部:扫一扫,识别图片内容。

第三步:识别到的图片信息展示,用弹窗的形式展现出来

四、展示效果

预览器效果

五、代码实现

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'
import picker from '@ohos.file.picker'
import common from '@ohos.app.ability.common'
import promptAction from '@ohos.promptAction'

let context = getContext(this) as common.UIAbilityContext

let permissionList: Permissions[] = [
'ohos.permission.READ_MEDIA',
'ohos.permission.MEDIA_LOCATION'
]

@Entry
@Component
struct Index {
@State img:string = "/common/images/img_up.png" //初始化图片
@State scanHeight:number = 0 // 扫描高度-都动画
@State isVisibility:boolean = false // 扫描框显隐控制

//获取本地图片路径
getLocalPicPath() {
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select({
MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
maxSelectNumber: 1
},
(err, photoPickerValue) => {
if (err) {
console.info("photoPicker_err:" + err.message)
return
}
console.info("photoPicker_Value:" + photoPickerValue.photoUris)
this.img = photoPickerValue.photoUris[0].toString()
}
)
}

//相册权限获取
isAuthorize() {
let AtManager = abilityAccessCtrl.createAtManager();
AtManager.requestPermissionsFromUser(context, permissionList)
.then((data) => {
console.info('request permissions from user success:' + data.authResults)
this.getLocalPicPath() //获取本地路径
})
.catch((err:Error) => {
console.info('request permissions from user failed:', JSON.stringify(err) ?? '')
});
}

六、代码结构及原理:
1.整体结构:

使用了ArkTS的装饰器语法,如@Entry和@Component。
2.状态管理:

组件使用@State装饰器定义了几个响应式状态变量,如scanHeight、isVisibility。这些变量的变化会自动触发UI的更新。
3.UI结构:

界面使用嵌套的Stack、Column和Row组件构建。主要包括图形选择、线条颜色选择、线宽调节等部分。
4.数据传递:

当点击"上传图片"按钮时,会调用isAuthorize()回调函数,先获取媒体权限,确认授权之后,在调用getLocalPicPath()回调函数,获取选择的图片。点击"扫一扫",识别上传图片内容
5.样式设置:

大量使用了链式调用来设置组件的样式,如字体大小、颜色、边距等。
6.响应式设计:

通过@State装饰器和状态变量的绑定,实现了界面的响应式更新。当用户进行操作时,相关的状态变量会更新,从而触发UI的重新渲染。

相关推荐
Reuuse25 分钟前
【HCIA-Datacom】华为VRP系统
服务器·网络·华为
PlumCarefree2 小时前
基于鸿蒙API10的RTSP播放器(四:沉浸式播放窗口)
华为·harmonyos
中关村科金6 小时前
中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速
华为·音视频·harmonyos
繁依Fanyi6 小时前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
小强在此9 小时前
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
华为·开源·团队开发·健康医疗·harmonyos·开源鸿蒙
奔跑的露西ly16 小时前
【鸿蒙 HarmonyOS NEXT】popup弹窗
华为·harmonyos
繁依Fanyi18 小时前
828华为云征文|华为Flexus云服务器搭建OnlyOffice私有化在线办公套件
服务器·开发语言·前端·python·算法·华为·华为云
OH五星上将21 小时前
OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(一)
嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙移植
codes234577891 天前
鸿蒙开发之ArkTS 界面篇 一
harmonyos·arkts·harmonyos next·deveco-studio·鸿蒙界面·鸿蒙界面入门·鸿蒙 index.ets
Bob99981 天前
电脑浏览器访问华为路由器报错,无法访问路由器web界面:ERR_SSL_VERSION_OR_CIPHER_MISMATCH 最简单的解决办法!
开发语言·javascript·网络·python·网络协议·华为·ssl