鸿蒙开发之无须申请权限访问相册图片

news/2024/12/18 15:16:49/文章来源:https://www.cnblogs.com/xpzll/p/18615035

访问相册图片介绍

在应用开发中,很多场景需要我们需要访问相册中的图片。例如:上传头像、上传银行卡、身份证资料、扫描文件功能、美颜功能等

所以访问相册里的图片成为我们必须要学习和掌握的内容。那如何访问相册图片呢?

在HarmonyOS中,鉴于对用户隐私的高度保护,要方便的完全读取相册与写入相册,需要极其复杂的权限审核。所幸,HarmonyOS也考虑到读取相册对于开发者而言也是一个非常常用的一个功能,因而提供了photoAccessHelper里的PhotoViewPicker来帮助开发者无需获得复杂权限的情况下来读取相册内容。

使用方法

  1. 导入相册管理模块。

    import { photoAccessHelper } from '@kit.MediaLibraryKit';
    
  2. 实例化PhotoViewPicker对象(也即图片选择器对象)

    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    
  3. 调用上述对象的select方法选择图片

    photoPicker.select({// 传入能选择的文件类型,这里选的是图片类型MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,// 设置能选择的数量maxSelectNumber: 1}).then((res: photoAccessHelper.PhotoSelectResult) => {console.log(res.photoUris.join(''))}).catch((err: Error) => {// 出错回调console.log(err.message)})
    })
    

    这里可以看到调用select方法有两个参数:MIMEType、maxSelectNumber

    MIMEType即设置可以选哪些类型的媒体文件,可选值有

    1. IMAGE_TYPE:图片类型,也即'image/*'
    2. VIDEO_TYPE:视频类型,也即'video/*'
    3. IMAGE_VIDEO_TYPE:所有类型皆可,也即:'*/*'
    4. MOVING_PHOTO_IMAGE_TYPE:动态照片类型(实况图),也即'image/movingPhoto'

    maxSelectNumber就比较好理解了,就是设置可以选择多少数量,若不设置默认为50,最大也只能设置500

  4. select方法是用Promise进行封装的,因此调用后有两种状态,成功进入then,失败进入catch

    进入then代表读取图片成功,读取到的结果是PhotoSelectResult类型的,这个类型有一个非常重要的属性,即为:photoUris,它是一个数组,里面保存了选择的资源的临时路径,像我们上面的代码,最大只允许选择1张图片,因此取下标0即为选择的图片或视频

用一个小界面测试一下

上面我们已经学了它的基本使用,我们用一个小界面测试一下。界面仅需放置一个Image用来展示选择后的图片,以及用一个按钮进行图片选择,代码如下

// 导入所需工具
import { photoAccessHelper } from '@kit.MediaLibraryKit'@Entry
@Component
struct Index {// 用个变量保存读取到得分图片@State imgUri: string = ''build() {Column() {// 展示图片Image(this.imgUri).height('45%')// 选择图片Button('选择图片').width('80%').onClick(() => {// 实例化选择器let photoPicker = new photoAccessHelper.PhotoViewPicker()// 开始选择图片,设置只允许选择图片,且最大选择1张photoPicker.select({MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,maxSelectNumber: 1}).then((res: photoAccessHelper.PhotoSelectResult) => {// 读取成功则赋值给变量去展示到界面this.imgUri = res.photoUris[0]}).catch((err: Error) => {// 出错回调console.log(err.message)})})}.width('100%').height('100%')}
}

最终效果如下:成功将猫林老师的照片展示出来了

image-20241215202846748

总结

  1. 如果需要不申请权限的情况下让app读取到系统图库里的图片,需使用photoAccessHelper
  2. 使用起来非常简单,仅需实例化PhotoViewPicker对象后再调用select方法即可
  3. 下篇猫林老师给大家介绍如何不申请权限的情况下写入照片到图库

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

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

相关文章

鸿蒙开发之不申请权限写入图片到相册

写入图片到相册介绍 在上一篇中,猫林老师给大家分享了如何在不申请权限的情况下读取相册内容。这一篇教大家如何写入图片到相册。 这在应用开发中,也是一个很常见的场景,比如我们要做一个文件扫描的功能。那是不是得把扫描的结果保存到图库呢?再比如我们做一个美颜的功能,…

清明上河图密码 26 集 电视剧 All In One

清明上河图密码 26 集 电视剧 All In One 《清明上河图密码》2024年播出的中国大陆古装悬疑电视剧,改编自中国大陆作家冶文彪创作的同名小说,由电影《男欢女爱》的导演杨帆与《深渊宝藏》的导演熊琛联合执导,张颂文、白百何领衔主演,周一围、侯岩松特别主演,张耀、夏梦、林…

python执行subprocess.run报错

问题 执行 subprocess.run(command, check=True) 时报错 File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1420, in _execute_childhp, ht, pid, tid = _winapi.CreateProcess(executable, args,FileNotFoundError:[WinError 2…

二:使用正点原子的直流无刷驱动板自写FOC控制永磁同步(PMSM)电机(位置闭环)

在上一篇博客中配置了UVW三相PWM的定时器,在此基础上增加配置ABZ编码器定时器启用一个定时器中断,用于PID处理 代码如下// 常量定义 #define PI 3.14159265359f #define PWM_RESOLUTION 5250.0f // PWM分辨率 #define CIRCLE_RESOLUTION 1000 // 圆周分辨率 #define MOTOR_…

易基因:游离细胞DNA(cfDNA)检测整体研究方案

01.技术简述 细胞游离DNA(cell-free DNA,cfDNA)是指在生物体的体液中(如血浆、尿液、脑脊液等)自由存在的、非细胞内的DNA片段。这些DNA片段通常来源于细胞凋亡(程序性死亡)或坏死(细胞损伤或死亡后释放),可以被释放到循环系统中,并在体液中被检测到。cfDNA研究和应…

域名历史是什么?怎么进行域名历史查询?

域名是互联网上用来识别和访问网站的一个易于记忆的地址。它将IP地址转换成人类可读的格式,例如 www.example.com。域名是互联网的基础,每个网站都需要一个独特的域名以便用户能够访问。 什么是域名历史? 域名历史记录了一个域名自注册以来的所有变更,包括所有权、DNS设置、…

四款电脑桌面好用的备忘录app推荐,可同步手机

1、sticky notes 这款是Windows系统自带的备忘记事工具,中文名叫“便笺”。点击桌面左下角“开始”,在程序列表中可找到。 它在电脑桌面上是以一张一张彩色便利贴展现的,可以记录简单的文字和图片,非常像纸质便利贴的电子版。 可以通过Office365和手机端同步数据。2、敬业签…

GO 学习笔记之零 (二)git 操作

一、克隆git上仓库指定分支到本地 1、使用 VSCODE 工具详见:GO 学习笔记之一 环境安装 - 夏之夜 - 博客园 文章中的 第四章节的 "导入git项目" 二、git项目本地更改提交到git仓库 1、使用 VSCODE 工具 1.1 工程只有一人开发,不存在冲突的场景点击 VSCODE工具上的“…

写了两个自动化脚本,从下载-构建-打包-提取-备份-更新-重启

##!/bin/bash# 定义颜色用于日志输出 RED=\033[0;31m GREEN=\033[0;32m YELLOW=\033[1;33m NC=\033[0m # No Color# 检查参数 if [ -z "$1" ]; thenecho -e "${RED}错误: 未传入分支号!${NC}"echo "用法: $0 <分支号>"exit 1 fi# 读取分支…

冰雪旅游大爆发:如何优化冰雪旅游管理与服务——看板软件篇

利用板栗看板进行冰雪旅游的旅游管理与运营可以带来诸多便利和效益。通过明确目标与需求、创建项目列表、信息整合与展示、游客管理与服务、数据分析与决策支持以及团队协作与沟通等方面的应用,可以显著提升冰雪旅游的管理效率和服务质量。Wind数据显示,自9月份以来,冰雪旅游…

CI/CD方案:推动智能汽车开发的高效利器

CI/CD方案:推动智能汽车开发的高效利器在智能化和自动驾驶技术飞速发展的背景下,汽车软件开发的复杂性正以前所未有的速度增长。面对市场对效率、质量和快速迭代的高需求,传统开发模式已然捉襟见肘。作为提升开发效率和质量的核心工具,CI/CD(持续集成与持续交付/部署)方案…

说一个使用okhttp的理由

当时公司为了让接入网关变的简单,于是就开发了一个client,然后给各个服务去使用。 有一次发送请求的时候,发现报timeout了,但实际上业务已经执行成功了。于是就去追代码,发现使用的尽然是hutool包的工具,那个真是糊涂呀 。 看代码发现没有指定timeout的参数就使用了默认参…