【HarmonyOS】鸿蒙中如何获取用户相册图片?photoAccessHelper.PhotoViewPicker

【HarmonyOS】鸿蒙中如何获取用户相册图片?photoAccessHelper.PhotoViewPicker

前言

有同学私聊我说,之前的博客文章提到的没有HarmonyOS白名单帐号,如何在OpenHarmony Gitee开发仓里学习API接口。需要注意一个点,默认看到的文档是master,需要切换到beta1。因为master开源鸿蒙项目组更新的会比较快,不方便学习API。

鸿蒙中获取用户相册的方式介绍

上一篇文章提到华为的隐私安全策略,目前几篇文章的思路是介绍Android和IOS中常见的访问用户信息的API,来对比给大家看,鸿蒙中的获取方式。

获取相册是我们最常见的操作了,目前华为是不提倡APP访问用户所有相册资源。说实话,我在使用IOS手机时,就喜欢权限设置里带的访问选择图片功能。不像安卓一样,获取用户授权后,APP就能访问到用户相册所有的图片。而是用户勾选开发给APP的图片,APP只能访问这些。这是IOS的做法。当然IOS也保留了,和Android类似的所有图片开放权限。

而华为鸿蒙中的效果,类似于Android调用系统相册,用户勾选后,将图片传递给APP的效果。在这个逻辑之上,鸿蒙封装了相册安全组件。我们通过调用API的属性设置,可以将相册组件做条件筛选。例如二维码,条码,身份证等等。

代码讲解

photoAccessHelper 是系统提供给我们访问用户相册的系统API,通过这个接口集,我们能创建相册以及访问、修改相册中的媒体数据信息等。

PhotoViewPicker是其子API,提供图库选择器对象,用来支撑选择图片/视频等用户场景。

PhotoSelectOptions图库选择选项设置对象。通过该对象的设置属性进行赋值,满足我们对图库选择器的一些个性化定制。(当然它是有基类,我们就不展开了)

值得注意的是,目前API更多很快。photoAccessHelper的形式,已经是官方推荐调用选择相册的API。逐步不维护原先picker【picker.PhotoViewPicker(context)】的形式了。目前picker的调用在beta1最新系统中,效果是很差的。首先会打开一个白色底图的空白界面,然后弹出相册组件。也不支持条件筛选功能,例如条码那些。
在这里插入图片描述

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { BusinessError } from '@kit.BasicServicesKit';/*** 相册图片选择*/


struct AlbumSelectPage {private TAG: string = "AlbumSelectPage";onClickSelectPhoto = ()=>{try {let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();// 设置筛选过滤条件PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;// 选择用户选择数量PhotoSelectOptions.maxSelectNumber = 1;// 实例化图片选择器let photoPicker = new photoAccessHelper.PhotoViewPicker();// 唤起安全相册组件photoPicker.select(PhotoSelectOptions, (err: BusinessError, PhotoSelectResult: photoAccessHelper.PhotoSelectResult) => {if (err) {console.error(this.TAG, "onClickSelectPhoto photoPicker.select error:" + JSON.stringify(err));return;}// 用户选择确认后,会回调到这里。console.info(this.TAG, "onClickSelectPhoto photoPicker.select successfully:" + JSON.stringify(PhotoSelectResult));});} catch (error) {let err: BusinessError = error as BusinessError;console.error(this.TAG, "onClickSelectPhoto photoPicker.select catch failed:" + JSON.stringify(err));}}build() {Row(){Button('点击唤起相册选择').onClick(this.onClickSelectPhoto)}.justifyContent(FlexAlign.Center).size({width: "100%",height: "100%"})}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图、图的遍历、最小生成树、最短路径

0、图的概念 **图:**是由顶点集合及顶点间的关系组成的一种数据结构:G (V, E),其中: 顶点集合V {x|x属于某个数据对象集}是有穷非空集合;边的集合E {(x,y)|x,y属于V}或者E {|x,y属于V && Path(x, y)}是顶…

浅学三次握手

数据要完成传输,必须要建立连接。由于建立TCP连接的过程需要来回3次,所以,将这个过程形象的叫做三次握手。 结合上面的图来看更清楚。 先说三次握手吧,连接是后续数据传输的基础。就像我们打电话一样,必须保证我和对方…

在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位一、数据实时监控的重要性二、PostgreSQ…

shell,重定向与管道符号

文章目录 一,什么是shell二,shell脚本和作用1. shell脚本2. 作用 三,shell脚本的构成内容四,创建和运行Shell脚本五,重定向与管道操作1. 交互式硬件设备2. 重定向操作概览表3. 管道操作 一,什么是shell sh…

Matlab 判断直线上一点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 判断一个点是否位于一直线上有很多方法,这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,我们可以使用Plucker坐标矢量构建一个Plucker矩阵: 则它与位于对应线上的齐次点…

排序(三)——归并排序(MergeSort)

欢迎来到繁星的CSDN,本期内容主要包括归并排序(MergeSort)的实现 一、归并排序的主要思路 归并排序和上一期讲的快速排序很像,都利用了分治的思想,将一整个数组拆成一个个小数组,排序完毕后进行再排序,直到整个数组排序…

文章管理小程序的设计

管理员账户功能包括:系统首页,个人中心,作者管理,文章管理,文章分类管理,论坛,系统管理 微信端账号功能包括:系统首页,文章,论坛,我的 开发系统…

代码随想录算法训练营第五十四天|99.岛屿数量 深搜、广搜、100.岛屿的最大面积

99.岛屿数量 题目链接:99.岛屿数量 文档讲解:代码随想录 状态:不会 深搜 思路: 遍历网格,发现岛屿:我们需要遍历整个二维网格,检查每一个位置上的元素。如果在遍历过程中遇到陆地(…

计网(1.1~1.4)

1.1计算机网络在信息时代的作用 21世纪的重要特征数字化、网络化和信息化 有三类网络:电信网络、有线电视网络和计算机网络 互联网两个重要基本特点,即连通性和共享 1.2因特网概述 (1)网络、互联网和互连网 网络:由若干结点和连接…

企业全历史行为数据 让你对竞争对手的一切清清楚楚

关于商业竞争,在刚进入信息时代的那些年,人们说“现代商战就是信息战”,强调用非对称的或者更快获得的信息来赢得竞争;近些年进入大数据时代,人们又说“得数据者得天下”,发现“数据算法”有很多妙用&#…

2024 Q1:AVP时代下全球XR头显市场动态与展望

随着苹果Vision Pro(AVP)的发布,空间计算时代正式拉开序幕,全球扩展现实(XR)产业迎来新的发展机遇与挑战。尽管苹果的加入激发了市场活力,但2024年第一季度的XR头显市场却呈现出复杂多变的格局&…

压缩视频的最佳方法,视频压縮大小不影响画质

在数字媒体时代,视频已成为我们记录生活和传递信息的重要方式。但随着视频分辨率的提升和拍摄时长的增加,视频文件的大小也随之“膨胀”。大视频文件不仅占用大量存储空间,还在分享和传输过程中造成不便。如何在保证画质的前提下,…

《基于 LatentFactor + Redis + ES 实现动态药房分配方法》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,欢迎多多交流。&am…

LabVIEW液压数据采集测试系统

液压系统是装载机的重要组成部分,通过液压传动和控制实现各项作业功能,如提升、倾斜、转向等。液压系统的性能直接影响装载机的作业效率和稳定性。为了保证装载机液压系统的正常运行和优化设计,需要对其进行数据采集和测试。本文介绍了一套基…

vue学习day09-自定义指令、插槽

29、自定义指令 (1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。 (2)分类: 1)全局注册 2)局部注册 3)示例: 让表…

gorm多表联合查询 Joins方法 LEFT JOIN , RIGHT JOIN , INNER JOIN, FULL JOIN 使用总结

gorm中多表联合查询,我们可以使用Joins来完成,这个Joins方法很灵活,我们可以非常方便的多多表进行联合查询, 我们先来看看这个方法的官方定义和使用示例: Joins方法定义和使用示例 当然我们这里要说的使用方式是官方示…

CUDA编程 - clock 学习记录

clock 学习记录 一、完整代码二、核函数流程三、main 函数流程四、学习总结(共享内存的声明和使用):4.1、例子4.2、数据从全局内存复制到共享内存: 该程序利用CUDA并行计算能力,执行归约操作以找到每个块内的最小值&am…

Spark项目通用开发框架

文章目录 1. 大数据项目结构2. 类说明2.1 公共接口类2.2 TaskNameEnum指定每个任务的名称2.3 TaskRunner中编写任务的业务逻辑 3. 任务执行脚本 每个公司内部都有一套自己的架子,一般新人来了就直接在已有的架子上开发业务。 以下仅仅作为记录下自己使用的架子&…

16_网络IPC1-套接字描述符

用户数据报协议(UDP) 与 传输控制协议(TCP) 文件描述符函数使用套接字的行为 禁止套接字IO

vue 自定义滚动条同步拖动(移动端)

实现效果&#xff0c;拖动左右箭头实现图片区域同步滚动&#xff0c;到边缘停止拖动。 HTML代码 <template><div touchstart"onClick"><!--使用draggable组件 图片列表区域--><draggablev-model"select_list"end"onEnd"cl…