鸿蒙(API 12 Beta3版)【媒体资源使用指导】Media Library Kit媒体文件管理服务

news/2024/9/19 0:53:06/ 标签: harmonyos, 媒体, 音视频, openharmony, 鸿蒙, 鸿蒙系统

应用可以通过photoAccessHelper的接口,对媒体资源(图片、视频)进行相关操作。

说明

  • 在进行功能开发前,请开发者查阅[开发准备],了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。
  • 文档中使用到photoAccessHelper的地方默认为使用开发准备中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。

为了保证应用的运行效率,大部分photoAccessHelper的接口调用都是异步的。以下异步调用的API示例均采用Promise函数

获取指定媒体资源

开发者可以根据特定的条件查询媒体资源,如指定类型、指定日期、指定相册等。

应用通过调用[PhotoAccessHelper.getAssets]获取媒体资源,并传入[FetchOptions]对象指定检索条件。如无特别说明,文档中涉及的待获取的资源均视为已经预置且在数据库中存在相应数据。如出现按照示例代码执行出现获取资源为空的情况请确认文件是否已预置,数据库中是否存在该文件的数据。

如果只想获取某个位置的对象(如第一个、最后一个、指定索引等),可以通过[FetchResult]中的接口获取对应位置的媒体资源对象。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • [申请相册管理模块读权限]‘ohos.permission.READ_IMAGEVIDEO’。
  • 导入[dataSharePredicates]模块。

指定媒体文件名获取图片或视频资源

下面以查询文件名为’test.jpg’的图片资源为例。

import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
const context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);async function example() {let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();predicates.equalTo(photoAccessHelper.PhotoKeys.DISPLAY_NAME, 'test.jpg');let fetchOptions: photoAccessHelper.FetchOptions = {fetchColumns: [],predicates: predicates};try {let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();console.info('getAssets photoAsset.displayName : ' + photoAsset.displayName);fetchResult.close();} catch (err) {console.error('getAssets failed with err: ' + err);}
}

获取图片和视频缩略图

通过接口[PhotoAsset.getThumbnail],传入缩略图尺寸,可以获取图片和视频缩略图。缩略图常用于UI界面展示。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • [申请相册管理模块读权限]‘ohos.permission.READ_IMAGEVIDEO’。
  • 导入[dataSharePredicates]模块。

获取某张图片的缩略图

当需要在相册展示图片和视频、编辑预览,应用需要获取某张图片的缩略图。

参考以下示例,获取图片的文件描述符fd后,需要解码为统一的PixelMap,方便在应用中进行图片显示或图片处理

下面以获取一张图片的缩略图为例,缩略图尺寸为720*720。

开发步骤

  1. 建立检索条件,用于获取图片资源。
  2. 调用[PhotoAccessHelper.getAssets]接口获取图片资源。
  3. 调用[FetchResult.getFirstObject]接口获取第一张图片。
  4. 调用PhotoAsset.getThumbnail获取图片的缩略图的[PixelMap]。
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import image from '@ohos.multimedia.image';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
const context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);async function example() {let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();let fetchOptions: photoAccessHelper.FetchOptions = {fetchColumns: [],predicates: predicates};try {let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();console.info('getAssets photoAsset.displayName : ' + photoAsset.displayName);let size: image.Size = { width: 720, height: 720 };let pixelMap: image.PixelMap =  await photoAsset.getThumbnail(size);let imageInfo: image.ImageInfo = await pixelMap.getImageInfo()console.info('getThumbnail successful, pixelMap ImageInfo size: ' + JSON.stringify(imageInfo.size));fetchResult.close();} catch (err) {console.error('getThumbnail failed with err: ' + err);}
}

重命名媒体资源

重命名修改的是文件的PhotoAsset.displayName属性,即文件的显示文件名,包含文件后缀。

调用[MediaAssetChangeRequest.setTitle]重命名后再通过[PhotoAccessHelper.applyChanges]更新到数据库中完成修改。

在重命名文件之前,需要先获取文件对象,可以通过[FetchResult]中的接口获取对应位置的文件。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • [申请相册管理模块权限]‘ohos.permission.WRITE_IMAGEVIDEO’和’ohos.permission.READ_IMAGEVIDEO’。

下面以将获取的图片资源中第一个文件重命名为例。

开发步骤

  1. 建立检索条件,用于获取图片资源。
  2. 调用[PhotoAccessHelper.getAssets]接口获取目标图片资源。
  3. 调用[FetchResult.getFirstObject]接口获取第一张图片,即要重命名的图片对象。
  4. 调用[MediaAssetChangeRequest.setTitle]接口将图片重命名为新的名字。
  5. 调用[PhotoAccessHelper.applyChanges]接口将修改的图片属性更新到数据库中完成修改。
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
let context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);async function example() {let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();let fetchOptions: photoAccessHelper.FetchOptions = {fetchColumns: ['title'],predicates: predicates};let newTitle: string = 'newTestPhoto';try {let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset);assetChangeRequest.setTitle(newTitle);await phAccessHelper.applyChanges(assetChangeRequest);fetchResult.close();} catch (err) {console.error(`rename failed with error: ${err.code}, ${err.message}`);}
}

将文件放入回收站

通过[MediaAssetChangeRequest.deleteAssets]可以将文件放入回收站。

放入回收站的文件将会保存30天,30天后会自动彻底删除。在此期间,应用用户可以通过系统应用“文件管理”或“图库”恢复文件。

前提条件

  • 获取相册管理模块photoAccessHelper实例。
  • [申请相册管理模块权限]‘ohos.permission.WRITE_IMAGEVIDEO’和’ohos.permission.READ_IMAGEVIDEO’。

下面以将文件检索结果中第一个文件放入回收站为例。

开发步骤

  1. 建立检索条件,用于获取图片资源。
  2. 调用[PhotoAccessHelper.getAssets]接口获取目标图片资源。
  3. 调用[FetchResult.getFirstObject]接口获取第一张图片,即要放入回收站的图片对象。
  4. 调用[MediaAssetChangeRequest.deleteAssets]接口将文件放入回收站。
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
let context = getContext(this);
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);async function example() {let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();let fetchOptions: photoAccessHelper.FetchOptions = {fetchColumns: [],predicates: predicates};try {let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [photoAsset]);fetchResult.close();} catch (err) {console.error(`deleteAssets failed with error: ${err.code}, ${err.message}`);}
}

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 鸿蒙 (OpenHarmony)开发学习视频》
  • 鸿蒙生态应用开发V2.0白皮书》
  • 鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 鸿蒙开发基础》
  • 鸿蒙开发进阶》
  • 鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1


http://www.ppmy.cn/news/1519796.html

相关文章

基于深度学习的游客满意度分析与评论分析【情感分析、主题分析】

需要本项目的可以私信博主 目录 1 绪论 1.1 选题背景及研究意义 1.1.1 选题背景 1.1.2 研究意义 1.2 研究内容与方法 1.2.1 研究内容 1.2.2 研究方法 1.3 创新与不足 1.3.1创新点 1.3.2研究局限性 2 文献综述 2.1 相关概念界定 2.1.1 大数据分析 2.1.2 游客满意度 2.2 国内外研…

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数

大数据系列之:查看Centos服务器用户可以创建的最大线程数、查看系统内核支持的最大线程数、查看系统支持的最大进程数、设置最大线程数限制、查看进程使用的线程数 显示当前用户的资源限制查看用户可以创建的最大线程指定进程的资源限制查看系统内核支持的最大线程数查看系统支…

React 入门第八天:性能优化与开发者工具的使用

随着对React的逐步深入&#xff0c;我开始关注如何优化React应用的性能&#xff0c;特别是在复杂的组件树和频繁的状态更新中保持应用的高效性。这一天&#xff0c;我集中学习了React中的性能优化策略&#xff0c;并探索了如何使用React开发者工具来调试和优化应用。 1. 组件的…

续:当有数据时添加slave2

【示例】 另启一台虚拟机&#xff0c;作为mysql3. 新的虚拟机没有mysql软件包&#xff0c;如何才能快速部署&#xff1f;通过mysql1. mysql1&#xff1a; [rootmysql1 ~]# rsync -al /usr/local/mysql/ root172.25.254.166:/usr/local/mysql The authenticity of host 172.25…

Java算法之快速排序(Quick Sort)

快速排序&#xff1a;分而治之的高效排序算法 简介 快速排序是一种分而治之的排序算法&#xff0c;由C. A. R. Hoare在1960年提出。它通过选取一个元素作为"基准"&#xff08;pivot&#xff09;&#xff0c;然后重新排列数组&#xff0c;使得所有比基准值小的元素都…

【软考】【多媒体应用设计师】媒体与技术

1. 多媒体技术改变了传统循序式模式&#xff0c;用户可以借助超文本链接等方式&#xff0c;更自由灵活地访问所需的信息&#xff0c;体现了其&#xff08; &#xff09;的特点。 A.控制性 B.非线性 C.集成性 D.实时性 答案解析&#xff1a;本题考查信息多媒体非线性特点。多媒体…

安防监控/软硬一体/视频汇聚网关EasyCVR硬件启动崩溃是什么原因?

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发&#xff0c;如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、WS-FMP4、HTTP-…

vue part 5

生命周期 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>引出生命周期</title><!-- 引入Vue --><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js&quo…

进程、线程的区别

进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中的基本概念&#xff0c;它们在资源管理和任务执行方面有着本质的区别&#xff1a; 定义&#xff1a; 进程&#xff1a;进程是操作系统进行资源分配和调度的一个独立单位。每个进程都有自己…

ArcGIS Pro 3.1下载分享

在使用了很长一段时间ArcGIS Pro 3.0之后&#xff0c;终于迎来了ArcGIS Pro 3.1的更新&#xff0c;这里为你分享一下ArcGIS Pro 3.1的安装步骤。 软件介绍 ArcGIS Pro 3.1 是由Esri发布的地理信息系统 (GIS) 软件的较新版本&#xff0c;作为 ArcGIS 桌面应用程序家族中的核心…

【递归深搜之记忆化搜索算法】

1. 斐波那契数 解法一&#xff1a;递归 class Solution { public:int fib(int n) {return dfs(n);}int dfs(int n){if(n 0 || n 1)return n;return dfs(n - 1) dfs(n - 2);} }; 解法二&#xff1a;记忆化搜索 class Solution {int nums[31]; // 备忘录 public:int fib(int …

使用C++,仿照string类,实现myString

类由结构体演化而来&#xff0c;只需要将struct改成关键字class&#xff0c;就定义了一个类 C中类和结构体的区别&#xff1a;默认的权限不同&#xff0c;结构体中默认权限为public&#xff0c;类中默认权限为private 默认的继承方式不同&#xff0c;结构体的默认继承方式为p…

微型直线导轨高精度运行的工作原理

微型导轨是一种用于高精度定位和运动控制的传动装置&#xff0c;常用于微小化、高精密度化的机械设备中&#xff0c;如IC制造设备、半导体设备、高速移载的设备、精密测量、检测仪器、医疗设备、X-Y table&#xff0c;以及高速皮带驱动的设备等小型化设备。 微型导轨的构成相对…

单窗口IP代理设置指南:轻松搞定

在现代互联网生活中&#xff0c;IP代理已经成为了许多人日常上网的必备工具。单窗口IP代理是一种非常实用的代理方式&#xff0c;它允许你在同一个浏览器中为不同的窗口设置不同的IP地址&#xff0c;从而更好地保护隐私和实现多任务处理。今天&#xff0c;我们就来详细讲解一下…

在 macOS 上升级 Ruby 版本的几种方法

在 macOS 上升级 Ruby 版本通常有几种方法&#xff0c;以下是一些常用的方法&#xff1a; 使用系统自带的 Ruby: macOS 系统自带 Ruby&#xff0c;但通常不是最新版本。可以通过终端使用 softwareupdate 命令来更新系统自带的 Ruby。 使用 Homebrew: Homebrew 是 macOS 的包管…

字符串地指针表示方式

每日诗词&#xff1a; 人生自是有情痴&#xff0c;此恨不关风与月。 ——玉楼春尊前拟把归期说 【宋】欧阳修 目录 数组本身的值和数组储存的值一样吗 char[]和cahr*的区别 1. 类型 2. 内存分配 3. 使用方式 4. 字符串字面量 实例 变式 总结&#xff1a; 下期预告&a…

vue2+countup.js实现大屏数字滚动效果封装

很多大屏、官网或者展示类页面会用到数字跳动更新效果的需求&#xff0c;countup用起来就非常方便 一、官网 CountUp.js 二、效果图 三、安装countup与引入 npm install countup 进行安装依赖 import { CountUp } from countUp.js;//需要用到的页面引入&#xff0c;也可以…

生成式AI:创造性智能的新纪元

引言 随着人工智能技术的飞速发展&#xff0c;生成式AI&#xff08;Generative AI&#xff09;已经成为一个引人注目的领域。它不仅仅是模仿人类行为&#xff0c;而是通过学习大量的数据&#xff0c;创造出全新的内容&#xff0c;如文本、图像、音乐等。本文将探讨生成式AI的基…

同样128个内核,AMD霄龙9755性能翻倍:Zen 5架构下的性能飞跃

近日&#xff0c;AMD在服务器处理器领域再次展示了其强大的技术实力&#xff0c;随着AMD EPYC“Turin”处理器发布日期的临近&#xff0c;其基准测试结果也开始浮出水面。硬件爱好者博主9550pro近期分享了AMD 128核EPYC 9755“Turin”处理器在7zip压缩/解压缩基准测试中的跑分数…

力扣(可被三整除的最大和)

1262. 可被三整除的最大和 提示 给你一个整数数组 nums&#xff0c;请你找出并返回能被三整除的元素 最大和。 思路&#xff1a; 方法一&#xff1a;利用一个长度为3的数组&#xff0c;分别保存0到i内余数为0&#xff0c;1&#xff0c;2的最大和&#xff0c;这样对于一个进入…