鸿蒙实战开发-如何实现查看系统相册、最近删除、收藏夹操作功能

介绍

本示例主要展示了相册相关的功能,使用@ohos.file.photoAccessHelper 接口,实现了查看系统相册、创建用户相册、查看相册照片、用户相册文件添加和删除、以及预览图片、最近删除、收藏夹操作等功能;

效果预览

在这里插入图片描述
使用说明

  1. 主界面:查询显示所有照片、系统相册(相机/视频/截屏录屏/我的收藏/最近删除)、用户相册
  2. 主界面点击“+”,创建用户相册
  3. 创建用户相册时添加图片到用户相册
  4. 长按相册,删除相册
  5. 长按相册,重命名相册(不可重名)
  6. 长按相册,相册多选,批量删除
  7. 点击相册,查看相册中的图片列表
  8. 点击图片,查看单个图片大图
  9. 点击心形图标,收藏图片
  10. 点击心形图标,取消收藏
  11. 大图界面,重命名文件(可重名)
  12. 大图界面,删除文件(移动到最近删除相册)
  13. 从最近删除恢复照片
  14. 点击视频,查看视频并播放
  15. 点击图片页面右上角叹号,查看图片详情
  16. 长按图片批量操作:多选/全选、删除、恢复
  17. 相册内图片列表界面点击“+”,从已有相册添加照片
  18. 长按图片列表图片,更多菜单,从图片选择添加到已有相册
  19. 在相册图片列表界面,长按图片,选择图片,点击更多,可以将图片加入到其他相册(可多选)
  20. 在用户相册图片列表界面,长按图片,选择图片,点击更多,可以将图片从当前相册移除(可多选)
  21. 在用户相册图片列表界面,长按图片,选择图片,点击更多,可以查看图片详情(可多选)

工程目录

.
├── base // @ohos.file.photoAccessHelper接口封装
│   ├── FavorUserFileDataItem.ts            // 收藏夹图片数据类
│   ├── InnerUserFileDataItem.ts            // 大图数据类
│   ├── TrashUserFileDataItemCache.ts       // 最近删除图片数据缓存
│   ├── TrashUserFileDataItem.ts            // 最近删除图片数据类
│   ├── UserFileDataChangeCallback.ts       // 图片数据变化回调
│   ├── UserFileDataHelper.ts               // 图片展示信息查询接口
│   ├── UserFileDataItemCache.ts            // 图片数据缓存
│   ├── UserFileDataItem.ts                 // 图片数据类
│   ├── UserFileModel.ts                    // photoAccessHelper接口封装
│   ├── UserFileObserverCallback.ts         // 图片数据监听回调
│   └── UserFileObserver.ts                 // 图片数据监听类
├── common //业务逻辑
│   ├── ActionBarProp.ts
│   ├── AlbumDataImpl.ts                    // 相册数据查询接口封装
│   ├── AlbumDataItem.ts                    // 相册数据类
│   ├── AlbumsDataSource.ts
│   ├── BroadcastManager.ts
│   ├── Broadcast.ts
│   ├── CommonObserverCallback.ts
│   ├── EventPipeline.ts
│   ├── GlobalContext.ts
│   ├── GroupDataImpl.ts                    // 相册成员数组数据接口封装
│   ├── GroupItemDataSource.ts              // 相册成员数组数据
│   ├── ItemDataSource.ts
│   ├── MultimodalInputManager.ts
│   ├── ScreenManager.ts                    // 屏幕显示逻辑
│   ├── SelectManager.ts                    // 选择状态逻辑
│   └── SimpleAlbumDataItem.ts              // 简化相册数据类
├── components //UI组件
│   ├── ActionBarButton.ets
│   ├── ActionBar.ets
│   ├── AddNotesDialog.ets
│   ├── AlbumGridItemNewStyle.ets
│   ├── AlbumListCard.ets
│   ├── AlbumScrollBar.ets
│   ├── AlbumSelectGridItemNewStyle.ets
│   ├── AlbumSetPage.ets
│   ├── CancelOperationDialog.ets
│   ├── CustomDialogView.ets
│   ├── DeleteDialog.ets
│   ├── DeleteProgressDialog.ets
│   ├── DetailMenuPanel.ets
│   ├── DetailsDialog.ets
│   ├── DetailTitle.ets
│   ├── EmptyAlbumComponent.ets
│   ├── FindSameNameDialog.ets
│   ├── GridScrollBar.ets
│   ├── ImageGridItemComponent.ets
│   ├── LoadingPanel.ets
│   ├── MediaOperationActionBar.ets
│   ├── MultiSelectDialog.ets
│   ├── NewAlbumDialog.ets
│   ├── NoPhotoComponent.ets
│   ├── NoPhotoIndexComponent.ets
│   ├── PhotoBrowserActionBar.ets
│   ├── PhotoBrowserBg.ets
│   ├── PhotoItem.ets
│   ├── PhotoSwiper.ets
│   ├── ProgressDialog.ets
│   ├── RenameDialog.ets
│   ├── SaveDialog.ets
│   ├── SaveImageDialog.ets
│   ├── SelectionTitle.ets
│   ├── SingleTitle.ets
│   ├── ToolBarButton.ets
│   ├── ToolBar.ets
│   └── VideoIcon.ets
├── constants //常量
│   ├── AnimationConstants.ts
│   ├── BroadcastConstants.ts
│   ├── BrowserConstants.ts
│   ├── Constants.ts
│   ├── MediaConstants.ts
│   ├── QueryConstants.ts
│   └── RouterConstants.ts
├── entryability //HAP入口
│   └── EntryAbility.ts
├── menus //菜单操作
│   ├── AlbumSetDeleteMenuOperation.ts
│   ├── AlbumSetNewMenuOperation.ts
│   ├── AlbumSetRenameMenuOperation.ts
│   ├── AsyncCallback.ts
│   ├── BatchDeleteMenuOperation.ts
│   ├── BatchRecoverMenuOperation.ts
│   ├── BatchRemoveMenuOperation.ts
│   ├── ClearRecycleMenuOperation.ts
│   ├── GotoPhotosMenuOperation.ts
│   ├── MenuContext.ts
│   ├── MenuOperationCallback.ts
│   ├── MenuOperation.ts
│   ├── MoveMenuOperation.ets
│   ├── ProcessMenuOperation.ts
│   ├── RenameMenuOperation.ts
├── models //类型定义
│   ├── ActionBarMode.ts
│   ├── Action.ts
│   ├── AlbumBarModel.ts
│   ├── AlbumSelectBarModel.ts
│   ├── JumpSourceToMain.ts
│   ├── MediaOperationType.ts
│   ├── NewAlbumBarModel.ts
│   ├── PhotoGridBarModel.ts
│   ├── ThumbnailModel.ts
│   └── ViewType.ts
├── pages //页面
│   ├── AlbumSelect.ets                           // 相册选择页面
│   ├── Index.ets                                 // 主页面
│   ├── MediaOperationPage.ets                    // 图片文件操作页面
│   ├── NewAlbumPage.ets                          // 新建相册页面
│   ├── PhotoBrowser.ets                          // 大图展示页面
│   ├── PhotoGridPage.ets                         // 图片列表页面
│   ├── SelectPhotoBrowser.ets                    // 图片选择页面
│   └── VideoBrowser.ets                          // 视频查看页面
└── utils //工具类
    ├── AbilityUtils.ts
    ├── AlbumUtil.ts
    ├── DateUtil.ts
    ├── DialogUtil.ts
    ├── hisysEventUtil.ts
    ├── ImageUtil.ts
    ├── Log.ts
    ├── MathUtils.ts
    ├── ResourceUtils.ts
    ├── SingleInstanceUtils.ts
    └── UiUtil.ts

具体实现

在base模块中通过封装photoAccessHelper向外提供功能接口,如Album查询操作

  • 如效果预览中的相册列表:在AlbumSetPage.ets 中调用AlbumDataImpl.reloadAlbumItemData();

在base模块中通过封装photoAccessHelper向外提供功能接口

  • 如新建相册:在AlbumSetPage.ets 中调用userFileModel.createAlbum();
  • 如删除图片:在BatchDeleteMenuOperation.ets 中调用userFileModel.deleteOne();
  • 如恢复图片:在TrashUserFileDataItem.ets 中调用userFileModel.recover();
  • 如永久删除图片:在TrashUserFileDataItem.ets
    中调用userFileModel.permanentDelete();
  • 如删除相册:在AlbumDataItem.ets 中调用userFileModel.deleteAlbum();

相关权限

ohos.permission.WRITE_IMAGEVIDEO

ohos.permission.READ_IMAGEVIDEO

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568。

2.本示例为Stage模型,支持API10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0 Release)

3.本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。需要配置"apl":"system_basic"才可安装成功;

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo FileManagement/Photos/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述
在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF: 获取完整版白皮书方式请点击→https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG?u=a42c4946d1514235863bb82a7b2ac128

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

一、入门必看

1.应用开发导读(ArkTS)
2………
在这里插入图片描述

二、HarmonyOS 概念→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.系统定义
2.技术架构
3.技术特性
4.系统安全
5…

在这里插入图片描述

三、如何快速入门?→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3…

在这里插入图片描述

四、开发基础知识→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
在这里插入图片描述

五、基于ArkTS 开发→https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【基于PSINS工具箱】组合导航,EKF与UKF的对比,使用153模型

代码简述 【务必注意】 需要事先安装PSINS工具箱!!! 如果没有工具箱,网上面很多,实在找不到可以找我要链接。没有工具箱是无法直接运行本程序的。 程序根据153的模型(15维状态量、3维GNSS观测量),在自己定义了一个运动路径后,使用EKF和UKF对状态进行估计,并绘制轨迹…

PostgreSQL入门到实战-第十四弹

PostgreSQL入门到实战 PostgreSQL数据过滤(七)官网地址PostgreSQL概述PostgreSQL中BETWEEN 命令理论PostgreSQL中BETWEEN 命令实战更新计划 PostgreSQL数据过滤(七) BETWEEN运算符允许您检查值是否在值的范围内。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…

OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境:Windows 11 编译环境:Ubuntu 22.04 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

element用户上传头像组件带大图预览,和删除功能

element 用户上传组件不支持大图预览&#xff0c;拿组件的简单修改一些&#xff0c;发表上来主要是记一下&#xff0c;以后可以用 效果图 <template><div class"flex-img"><div class"el-upload-list el-upload-list--picture-card" v-sh…

论文笔记:The Reversal Curse: LLMs trained on “A is B” fail to learn “B is A”

iclr 2024 reviewer 评分668 1 intro 论文揭示了自回归大模型&#xff08;LLM&#xff09;中令人惊讶的泛化失败【反转诅咒】 如果模型在“A is B”形式的句子上进行训练&#xff0c;它不会自动泛化到相反的方向“B is A”通过对“Uriah Hawthorne 是深渊旋律的作曲家”等虚构…

微服务项目sc2024父工程

1.基础版本要求 jdk 17maven 3.9mysql 8.0spring boot 3.2.0spring cloud 2023.0.0spring cloud alibaba 2022.0.0.0-RC2 2.创建父工程 2.1.字符编码 2.2.java编译版本 2.3.注解生效激活 2.4.File Type过滤 2.5.父工程中只保留pom文件,其余的删了 3.父工程pom文件 <?xm…

Covalent Network(CQT)推出以太坊质押迁移计划,以增强长期结构化数据可用性、塑造万亿级 LLM 参数体系

作为 Web3 领先的链上数据层&#xff0c;Covalent Network&#xff08;CQT&#xff09;宣布了其将质押操作从 Moonbeam 迁移回以太坊的决定。此举是 Covalent Network&#xff08;CQT&#xff09;走向以太坊时光机&#xff08;EWM&#xff09;的第一步&#xff0c;EWM 是一个为…

TensorFlow学习之:深度学习基础

神经网络基础 神经网络是深度学习的核心&#xff0c;它们受人脑的结构和功能启发&#xff0c;能够通过学习大量数据来识别模式和解决复杂问题。神经网络的基本工作原理包括前向传播和反向传播两个阶段。 前向传播&#xff08;Forward Propagation&#xff09; 前向传播是神经…

OpenC910 datasheet 2.0 翻译

概述 C910是由THEAD半导体有限公司开发的一款RISC-V兼容的64位高性能处理器。它通过架构和微架构创新&#xff0c;在控制流、计算和频率方面提供行业领先的性能。C910处理器基于RV64GC指令集&#xff0c;并实现了XIE&#xff08;XuanTie指令扩展&#xff09;技术。C910采用先进…

友思特应用 | 高精度呈现:PCB多类型缺陷检测系统

导读 PCB等电子产品的精密生产制造过程中&#xff0c;往往需要将缺陷问题100%高精度暴露。友思特 PCB 多类型缺陷检测系统&#xff0c;借由Neuro-T深度学习模型自动排查全部微小缺陷&#xff0c;为工业 PCB 生产制造提供了先进可靠的质量保障。 在现代制造业中&#xff0c;尤其…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件&#xff0c;并支持12V应用。   SBC的控制器区域网络&#xff08;CAN&#xff09;收发器部分在汽车和工业应用中提供高速&#xff08;HS&#xff09;差分模式数据传输&#xff08;最高可达2Mbaud&#xff09…

kali使用msf+apkhook520+cploar实现安卓手的攻击

学习网络安全的过程中&#xff0c;突发奇想怎么才能控制或者说是攻击手机 边找工作边实验 话不多说启动kali 一、使用msfapktool生成简单的木马程序 首先使用kali自带的msfvenom写上这样一段代码 选择安卓 kali的ip 一个空闲的端口 要输出的文件名 msfvenom -p android/met…

【软件测试】个人博客系统测试

个人博客系统测试 一、项目背景1.1 技术背景1.2 功能背景 二、自动化测试2.1 什么是自动化测试2.2 通过使用selenium进行自动化测试的编写&#xff08;Java实现&#xff09;2.3 编写测试用例&#xff0c;执行自动化测试2.3.1 输入用户名:test,密码:123&#xff0c;登录成功2.3.…

深度学习图像处理04:图像分类模型训练实战——动物分类

这篇博文不涉及理论知识&#xff0c;主要通过一个完整的深度学习模型训练流程&#xff0c;直观地了解深度学习图像分类任务。有关理论的部分&#xff0c;之前几篇博文已经涉及基础部分&#xff0c;之后也会对一些理论进行补充。 本文将结合代码&#xff0c;主要介绍三部分内容…

halcon缺陷检测-印刷品检测(差异化模型),键盘字符缺陷检测

前言 在实际项目中&#xff0c;印刷品缺陷检测是缺陷检测中的难点项目。通常印刷品检测往往具备缺陷小&#xff0c;缺陷所在位置不固定&#xff0c;出现少印或者多印的情况。并且由于产线原因&#xff0c;大量的印刷品在视野中的大小并不是完全一致的&#xff0c;可能出现细微…

【UE5 C++】访问修饰符public/protected/private继承

限制类与类之间访问级别的方法 public 在类中创建一个public的部分&#xff0c;即" public: "&#xff0c;public之下的所有内容都是公共的,可以在类之间访问 private&#xff08;最常见&#xff09; 如若没有指明修饰符&#xff0c;则默认为private 不能在类的外…

文本处理常见命令

目录 前言-了解Linux目录结构 一、cat-查看文件内容 1.表现形式 2.常用选项 3.示例 二、more-查看文件内容 1.表现形式 2.交互操作方法 3.示例 三、less-查看文件内容 1.表现形式 2.交互操作方法 四、head-从头查看文件内容 五、tail-从尾查看文件内容 六、wc-统…

【石上星光】context,go的上下文存储并发控制之道

目录 1 引言2 What&#xff1f;3 How&#xff1f; 3.1 用法一、上下文数据存储3.2 用法二、并发控制 3.2.1 场景1 主动取消3.2.2 场景2 超时取消 3.3 用法三、创建一个空Context&#xff08;emptyCtx&#xff09; 4 Why&#xff1f; 4.1 go中的上下文思想 4.1.1 上下文是什么…

17 - Games101 - 笔记 - 材质与外观

**17 **材质与外观 材质与BRDF 自然界中的材质&#xff1a;丝绸、头发、蝴蝶翅膀表面、寿司表面等等 图形学中的材质&#xff1a;同一个模型之所以渲染出不同结果的原因就是因为材质。在图形学中是给不同的物体指定不同的材质&#xff0c;知道它们如何和光线作用后就能正确的…

体验Docker快速部署微信机器人

找到一个 Docker 部署微信机器人的镜像&#xff0c;简单测试一下。 1 使用 Docker 部署 1.1 拉取最新镜像 docker pull dannicool/docker-wechatbot-webhook1.2 Docker 部署 docker run -d --name wxBotWebhook -p 3001:3001 \ -v ~/wxBot_logs:/app/log \ dannicool/docker…