智能客服
你问我答,随时在线为你解决问题
应用可以通过photoAccessHelper的接口,对媒体资源(图片、视频)进行相关操作。
为了保证应用的运行效率,大部分photoAccessHelper的接口调用都是异步的。以下异步调用的API示例均采用Promise函数,更多方式可以查阅API参考。
开发者可以根据特定的条件查询媒体资源,如指定类型、指定日期、指定相册等。
应用通过调用PhotoAccessHelper.getAssets获取媒体资源,并传入FetchOptions对象指定检索条件。如无特别说明,文档中涉及的待获取的资源均视为已经预置且在数据库中存在相应数据。如出现按照示例代码执行出现获取资源为空的情况请确认文件是否已预置,数据库中是否存在该文件的数据。
如果只想获取某个位置的对象(如第一个、最后一个、指定索引等),可以通过FetchResult中的接口获取对应位置的媒体资源对象。
前提条件
下面以查询文件名为'test.jpg'的图片资源为例。
- import { dataSharePredicates } from '@kit.ArkData';
- import { photoAccessHelper } from '@kit.MediaLibraryKit';
- 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界面展示。
前提条件
当需要在相册展示图片和视频、编辑预览,应用需要获取某张图片的缩略图。
参考以下示例,获取图片的文件描述符fd后,需要解码为统一的PixelMap,方便在应用中进行图片显示或图片处理,具体请参考图片解码。
下面以获取一张图片的缩略图为例,缩略图尺寸为720*720。
开发步骤
- import { dataSharePredicates } from '@kit.ArkData';
- import { image } from '@kit.ImageKit';
- import { photoAccessHelper } from '@kit.MediaLibraryKit';
- 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中的接口获取对应位置的文件。
前提条件
下面以将获取的图片资源中第一个文件重命名为例。
开发步骤
- import { dataSharePredicates } from '@kit.ArkData';
- import { photoAccessHelper } from '@kit.MediaLibraryKit';
- 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天后会自动彻底删除。在此期间,应用用户可以通过系统应用“文件管理”或“图库”恢复文件。
前提条件
下面以将文件检索结果中第一个文件放入回收站为例。
开发步骤
- import { dataSharePredicates } from '@kit.ArkData';
- import { photoAccessHelper } from '@kit.MediaLibraryKit';
- 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}`);
- }
- }