应用可以通过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。
开发步骤
- 建立检索条件,用于获取图片资源。
- 调用[PhotoAccessHelper.getAssets]接口获取图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片。
- 调用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’。
下面以将获取的图片资源中第一个文件重命名为例。
开发步骤
- 建立检索条件,用于获取图片资源。
- 调用[PhotoAccessHelper.getAssets]接口获取目标图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片,即要重命名的图片对象。
- 调用[MediaAssetChangeRequest.setTitle]接口将图片重命名为新的名字。
- 调用[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’。
下面以将文件检索结果中第一个文件放入回收站为例。
开发步骤
- 建立检索条件,用于获取图片资源。
- 调用[PhotoAccessHelper.getAssets]接口获取目标图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片,即要放入回收站的图片对象。
- 调用[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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿