photoAccessHelper提供用户相册相关的接口,供开发者创建、删除用户相册,往用户相册中添加和删除图片和视频资源等。
说明
在进行功能开发前,请开发者查阅[开发准备],了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。
文档中使用到photoAccessHelper的地方默认为使用开发准备中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。
为了保证应用的运行效率,大部分photoAccessHelper的接口调用都是异步的。以下异步调用的API示例均采用Promise函数
如无特别说明,文档中涉及的待获取的资源均视为已经预置且在数据库中存在相应数据。如出现按照示例代码执行出现获取资源为空的情况请确认文件是否已预置,数据库中是否存在该文件的数据。
获取用户相册
通过[PhotoAccessHelper.getAlbums]接口获取用户相册。
前提条件
- 获取相册管理模块photoAccessHelper实例。
- [申请相册管理模块权限]‘ohos.permission.READ_IMAGEVIDEO’。
下面以获取一个相册名为’albumName’的用户相册为例。
开发步骤
- 建立检索条件,用于获取用户相册。
- 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。
- 调用[FetchResult.getFirstObject]接口获取第一个用户相册。
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();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;
predicates.equalTo(albumName, 'albumName');
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
try {
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions);
let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
console.info('getAlbums successfully, albumName: ' + album.albumName);
fetchResult.close();
} catch (err) {
console.error('getAlbums failed with err: ' + err);
}
}
重命名用户相册
重命名用户相册修改的是相册的Album.albumName属性。
调用[MediaAlbumChangeRequest.setAlbumName]重命名用户相册后再通过[PhotoAccessHelper.applyChanges]更新到数据库中完成修改。
在重命名用户相册之前,需要先获取相册对象,可以通过[FetchResult]中的接口获取对应位置的用户相册。
重命名的相册名参数规格为:
-
相册名字符串长度为1~255。
-
不允许出现的非法英文字符,包括:
. \ / : * ? " ’ ` < > | { } [ ]
-
英文字符大小写不敏感。
-
相册名不允许重名。
前提条件
- 获取相册管理模块photoAccessHelper实例。
- [申请相册管理模块权限]‘ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。
下面以将一个相册名为’albumName’的用户相册重命名为例。
开发步骤
- 建立检索条件,用于获取用户相册。
- 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。
- 调用[FetchResult.getFirstObject]接口获取第一个用户相册。
- 调用MediaAlbumChangeRequest.setAlbumName接口设置新的相册名。
- 调用PhotoAccessHelper.applyChanges接口将修改的相册属性更新到数据中完成修改。
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();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;
predicates.equalTo(albumName, 'albumName');
let fetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: predicates
};
try {
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions);
let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
console.info('getAlbums successfully, albumName: ' + album.albumName);
let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album);
let newAlbumName: string = 'newAlbumName';
albumChangeRequest.setAlbumName(newAlbumName);
await phAccessHelper.applyChanges(albumChangeRequest);
console.info('setAlbumName successfully, new albumName: ' + album.albumName);
fetchResult.close();
} catch (err) {
console.error('setAlbumName failed with err: ' + err);
}
}
添加图片和视频到用户相册中
先[获取用户相册]对象和需要添加到相册中的图片或视频的对象数组,然后调用[MediaAlbumChangeRequest.addAssets]和[PhotoAccessHelper.applyChanges]接口往用户相册中添加图片或视频。
前提条件
- 获取相册管理模块photoAccessHelper实例。
- [申请相册管理模块权限]‘ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。
下面以将往相册名为’albumName’的用户相册中添加一张图片为例。
开发步骤
- 建立相册检索条件,用于获取用户相册。
- 建立图片检索条件,用于获取图片。
- 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。
- 调用[FetchResult.getFirstObject]接口获取第一个用户相册。
- 调用[PhotoAccessHelper.getAssets]接口获取图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片。
- 调用MediaAlbumChangeRequest.addAssets接口往用户相册中添加图片。
- 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。
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 albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;
albumPredicates.equalTo(albumName, 'albumName');
let albumFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: albumPredicates
};
let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let photoFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: photoPredicates
};
try {
let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions);
let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
console.info('getAlbums successfully, albumName: ' + album.albumName);
let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(photoFetchOptions);
let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject();
console.info('getAssets successfully, albumName: ' + photoAsset.displayName);
let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album);
albumChangeRequest.addAssets([photoAsset]);
await phAccessHelper.applyChanges(albumChangeRequest);
console.info('succeed to add ' + photoAsset.displayName + ' to ' + album.albumName);
albumFetchResult.close();
photoFetchResult.close();
} catch (err) {
console.error('addAssets failed with err: ' + err);
}
}
获取用户相册中的图片和视频
先[获取用户相册]对象,然后调用[Album.getAssets]接口获取用户相册中的图片资源。
前提条件
- 获取相册管理模块photoAccessHelper实例。
- [申请相册管理模块权限]‘ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。
下面以获取相册名为’albumName’的用户相册中的一张图片为例。
开发步骤
- 建立相册检索条件,用于获取用户相册。
- 建立图片检索条件,用于获取图片。
- 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。
- 调用[FetchResult.getFirstObject]接口获取第一个用户相册。
- 调用Album.getAssets接口获取用户相册中的图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片。
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 albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;
albumPredicates.equalTo(albumName, 'albumName');
let albumFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: albumPredicates
};
let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let photoFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: photoPredicates
};
try {
let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions);
let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
console.info('getAlbums successfully, albumName: ' + album.albumName);
let photoFetchResult = await album.getAssets(photoFetchOptions);
let photoAsset = await photoFetchResult.getFirstObject();
console.info('album getAssets successfully, albumName: ' + photoAsset.displayName);
albumFetchResult.close();
photoFetchResult.close();
} catch (err) {
console.error('album getAssets failed with err: ' + err);
}
}
从用户相册中移除图片和视频
先[获取用户相册]对象,然后调用[Album.getAssets]接口获取用户相册中的资源。
选择其中要移除的资源,然后调用[MediaAlbumChangeRequest.removeAssets]和[PhotoAccessHelper.applyChanges]接口移除。
前提条件
- 获取相册管理模块photoAccessHelper实例。
- [申请相册管理模块权限]‘ohos.permission.READ_IMAGEVIDEO’和’ohos.permission.WRITE_IMAGEVIDEO’。
下面以将往相册名为’albumName’的用户相册中移除一张图片为例。
开发步骤
- 建立相册检索条件,用于获取用户相册。
- 建立图片检索条件,用于获取图片。
- 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。
- 调用[FetchResult.getFirstObject]接口获取第一个用户相册。
- 调用Album.getAssets接口获取图片资源。
- 调用[FetchResult.getFirstObject]接口获取第一张图片。
- 调用MediaAlbumChangeRequest.removeAssets接口从用户相册中移除图片。
- 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。
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 albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME;
albumPredicates.equalTo(albumName, 'albumName');
let albumFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: albumPredicates
};
let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
let photoFetchOptions: photoAccessHelper.FetchOptions = {
fetchColumns: [],
predicates: photoPredicates
};
try {
let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions);
let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
console.info('getAlbums successfully, albumName: ' + album.albumName);
let photoFetchResult = await album.getAssets(photoFetchOptions);
let photoAsset = await photoFetchResult.getFirstObject();
console.info('album getAssets successfully, albumName: ' + photoAsset.displayName);
let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album);
albumChangeRequest.removeAssets([photoAsset]);
await phAccessHelper.applyChanges(albumChangeRequest);
console.info('succeed to remove ' + photoAsset.displayName + ' from ' + album.albumName);
albumFetchResult.close();
photoFetchResult.close();
} catch (err) {
console.error('removeAssets failed with err: ' + err);
}
}
最后呢
很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿