1# 用户相册资源使用指导 2 3photoAccessHelper提供用户相册相关的接口,供开发者创建、删除用户相册,往用户相册中添加和删除图片和视频资源等。 4 5> **说明:** 6> 7> 在进行功能开发前,请开发者查阅[开发准备](photoAccessHelper-preparation.md),了解如何获取相册管理模块实例和如何申请相册管理模块功能开发相关权限。 8> 文档中使用到photoAccessHelper的地方默认为使用开发准备中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。 9 10为了保证应用的运行效率,大部分photoAccessHelper的接口调用都是异步的。以下异步调用的API示例均采用Promise函数,更多方式可以查阅[API参考](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md)。 11如无特别说明,文档中涉及的待获取的资源均视为已经预置且在数据库中存在相应数据。如出现按照示例代码执行出现获取资源为空的情况请确认文件是否已预置,数据库中是否存在该文件的数据。 12 13## 创建用户相册(仅向系统应用开放) 14 15通过[MediaAlbumChangeRequest.createAlbumRequest](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#createalbumrequest11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口创建用户相册。 16 17待创建的相册名参数规格为: 18 19- 相册名字符串长度为1~255。 20- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 21- 英文字符大小写不敏感。 22- 相册名不允许重名。 23 24**前提条件** 25 26- 获取相册管理模块photoAccessHelper实例。 27- 申请相册管理模块权限'ohos.permission.WRITE_IMAGEVIDEO'。 28 29下面以创建一个用户相册为例。 30 31**开发步骤** 32 331. 设置相册名。 342. 调用MediaAlbumChangeRequest.createAlbumRequest接口创建相册变更请求。 353. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 36 37```ts 38import photoAccessHelper from '@ohos.file.photoAccessHelper'; 39const context = getContext(this); 40let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 41 42async function example() { 43 try { 44 let albumName = 'albumName'; 45 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = photoAccessHelper.MediaAlbumChangeRequest.createAlbumRequest(context, albumName); 46 await phAccessHelper.applyChanges(albumChangeRequest); 47 let album: photoAccessHelper.Album = albumChangeRequest.getAlbum(); 48 console.info('create album successfully, album name: ' + album.albumName + ' uri: ' + album.albumUri); 49 } catch (err) { 50 console.error('create album failed with err: ' + err); 51 } 52} 53``` 54 55## 获取用户相册 56 57通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getalbums-2)接口获取用户相册。 58 59**前提条件** 60 61- 获取相册管理模块photoAccessHelper实例。 62- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'。 63 64下面以获取一个相册名为'albumName'的用户相册为例。 65 66**开发步骤** 67 681. 建立检索条件,用于获取用户相册。 692. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 703. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 71 72```ts 73import dataSharePredicates from '@ohos.data.dataSharePredicates'; 74import photoAccessHelper from '@ohos.file.photoAccessHelper'; 75const context = getContext(this); 76let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 77 78async function example() { 79 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 80 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 81 predicates.equalTo(albumName, 'albumName'); 82 let fetchOptions: photoAccessHelper.FetchOptions = { 83 fetchColumns: [], 84 predicates: predicates 85 }; 86 87 try { 88 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 89 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 90 console.info('getAlbums successfully, albumName: ' + album.albumName); 91 fetchResult.close(); 92 } catch (err) { 93 console.error('getAlbums failed with err: ' + err); 94 } 95} 96``` 97 98## 重命名用户相册 99 100重命名用户相册修改的是相册的Album.albumName属性。 101 102调用[MediaAlbumChangeRequest.setAlbumName](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#setalbumname11)重命名用户相册后再通过[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)更新到数据库中完成修改。 103 104在重命名用户相册之前,需要先获取相册对象,可以通过[FetchResult](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#fetchresult)中的接口获取对应位置的用户相册。 105 106重命名的相册名参数规格为: 107 108- 相册名字符串长度为1~255。 109- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 110- 英文字符大小写不敏感。 111- 相册名不允许重名。 112 113**前提条件** 114 115- 获取相册管理模块photoAccessHelper实例。 116- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 117 118下面以将一个相册名为'albumName'的用户相册重命名为例。 119 120**开发步骤** 121 1221. 建立检索条件,用于获取用户相册。 1232. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 1243. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 1254. 调用MediaAlbumChangeRequest.setAlbumName接口设置新的相册名。 1265. 调用PhotoAccessHelper.applyChanges接口将修改的相册属性更新到数据中完成修改。 127 128```ts 129import dataSharePredicates from '@ohos.data.dataSharePredicates'; 130import photoAccessHelper from '@ohos.file.photoAccessHelper'; 131const context = getContext(this); 132let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 133 134async function example() { 135 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 136 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 137 predicates.equalTo(albumName, 'albumName'); 138 let fetchOptions: photoAccessHelper.FetchOptions = { 139 fetchColumns: [], 140 predicates: predicates 141 }; 142 143 try { 144 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 145 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 146 console.info('getAlbums successfully, albumName: ' + album.albumName); 147 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 148 let newAlbumName: string = 'newAlbumName'; 149 albumChangeRequest.setAlbumName(newAlbumName); 150 await phAccessHelper.applyChanges(albumChangeRequest); 151 console.info('setAlbumName successfully, new albumName: ' + album.albumName); 152 fetchResult.close(); 153 } catch (err) { 154 console.error('setAlbumName failed with err: ' + err); 155 } 156} 157``` 158 159## 添加图片和视频到用户相册中 160 161先[获取用户相册](#获取用户相册)对象和需要添加到相册中的图片或视频的对象数组,然后调用[MediaAlbumChangeRequest.addAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#addassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口往用户相册中添加图片或视频。 162 163**前提条件** 164 165- 获取相册管理模块photoAccessHelper实例。 166- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 167 168下面以将往相册名为'albumName'的用户相册中添加一张图片为例。 169 170**开发步骤** 171 1721. 建立相册检索条件,用于获取用户相册。 1732. 建立图片检索条件,用于获取图片。 1743. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 1754. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject)接口获取第一个用户相册。 1765. 调用[PhotoAccessHelper.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets)接口获取图片资源。 1776. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject)接口获取第一张图片。 1787. 调用MediaAlbumChangeRequest.addAssets接口往用户相册中添加图片。 1798. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 180 181```ts 182import dataSharePredicates from '@ohos.data.dataSharePredicates'; 183import photoAccessHelper from '@ohos.file.photoAccessHelper'; 184const context = getContext(this); 185let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 186 187async function example() { 188 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 189 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 190 albumPredicates.equalTo(albumName, 'albumName'); 191 let albumFetchOptions: photoAccessHelper.FetchOptions = { 192 fetchColumns: [], 193 predicates: albumPredicates 194 }; 195 196 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 197 let photoFetchOptions: photoAccessHelper.FetchOptions = { 198 fetchColumns: [], 199 predicates: photoPredicates 200 }; 201 202 try { 203 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 204 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 205 console.info('getAlbums successfully, albumName: ' + album.albumName); 206 let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(photoFetchOptions); 207 let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject(); 208 console.info('getAssets successfully, albumName: ' + photoAsset.displayName); 209 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 210 albumChangeRequest.addAssets([photoAsset]); 211 await phAccessHelper.applyChanges(albumChangeRequest); 212 console.info('succeed to add ' + photoAsset.displayName + ' to ' + album.albumName); 213 albumFetchResult.close(); 214 photoFetchResult.close(); 215 } catch (err) { 216 console.error('addAssets failed with err: ' + err); 217 } 218} 219``` 220 221## 获取用户相册中的图片和视频 222 223先[获取用户相册](#获取用户相册)对象,然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取用户相册中的图片资源。 224 225**前提条件** 226 227- 获取相册管理模块photoAccessHelper实例。 228- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 229 230下面以获取相册名为'albumName'的用户相册中的一张图片为例。 231 232**开发步骤** 233 2341. 建立相册检索条件,用于获取用户相册。 2352. 建立图片检索条件,用于获取图片。 2363. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 2374. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 2385. 调用Album.getAssets接口获取用户相册中的图片资源。 2396. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一张图片。 240 241```ts 242import dataSharePredicates from '@ohos.data.dataSharePredicates'; 243import photoAccessHelper from '@ohos.file.photoAccessHelper'; 244const context = getContext(this); 245let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 246 247async function example() { 248 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 249 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 250 albumPredicates.equalTo(albumName, 'albumName'); 251 let albumFetchOptions: photoAccessHelper.FetchOptions = { 252 fetchColumns: [], 253 predicates: albumPredicates 254 }; 255 256 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 257 let photoFetchOptions: photoAccessHelper.FetchOptions = { 258 fetchColumns: [], 259 predicates: photoPredicates 260 }; 261 262 try { 263 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 264 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 265 console.info('getAlbums successfully, albumName: ' + album.albumName); 266 let photoFetchResult = await album.getAssets(photoFetchOptions); 267 let photoAsset = await photoFetchResult.getFirstObject(); 268 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 269 albumFetchResult.close(); 270 photoFetchResult.close(); 271 } catch (err) { 272 console.error('album getAssets failed with err: ' + err); 273 } 274} 275``` 276 277## 从用户相册中移除图片和视频 278 279先[获取用户相册](#获取用户相册)对象,然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取用户相册中的资源。 280 281选择其中要移除的资源,然后调用[MediaAlbumChangeRequest.removeAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#removeassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口移除。 282 283**前提条件** 284 285- 获取相册管理模块photoAccessHelper实例。 286- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 287 288下面以将往相册名为'albumName'的用户相册中移除一张图片为例。 289 290**开发步骤** 291 2921. 建立相册检索条件,用于获取用户相册。 2932. 建立图片检索条件,用于获取图片。 2943. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 2954. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 2965. 调用Album.getAssets接口获取图片资源。 2976. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一张图片。 2987. 调用MediaAlbumChangeRequest.removeAssets接口从用户相册中移除图片。 2998. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 300 301```ts 302import dataSharePredicates from '@ohos.data.dataSharePredicates'; 303import photoAccessHelper from '@ohos.file.photoAccessHelper'; 304const context = getContext(this); 305let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 306 307async function example() { 308 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 309 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 310 albumPredicates.equalTo(albumName, 'albumName'); 311 let albumFetchOptions: photoAccessHelper.FetchOptions = { 312 fetchColumns: [], 313 predicates: albumPredicates 314 }; 315 316 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 317 let photoFetchOptions: photoAccessHelper.FetchOptions = { 318 fetchColumns: [], 319 predicates: photoPredicates 320 }; 321 322 try { 323 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 324 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 325 console.info('getAlbums successfully, albumName: ' + album.albumName); 326 let photoFetchResult = await album.getAssets(photoFetchOptions); 327 let photoAsset = await photoFetchResult.getFirstObject(); 328 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 329 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 330 albumChangeRequest.removeAssets([photoAsset]); 331 await phAccessHelper.applyChanges(albumChangeRequest); 332 console.info('succeed to remove ' + photoAsset.displayName + ' from ' + album.albumName); 333 albumFetchResult.close(); 334 photoFetchResult.close(); 335 } catch (err) { 336 console.error('removeAssets failed with err: ' + err); 337 } 338} 339``` 340 341## 删除用户相册(仅向系统应用开放) 342 343先[获取用户相册](#获取用户相册)对象,然后调用[MediaAlbumChangeRequest.deleteAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#deletealbums11)删除用户相册。 344 345**前提条件** 346 347- 获取相册管理模块photoAccessHelper实例。 348- 申请相册管理模块权限'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 349 350下面以删除一个相册名为'albumName'的用户相册为例。 351 352**开发步骤** 353 3541. 建立检索条件,用于获取用户相册。 3552. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 3563. 调用FetchResult.getFirstObject接口获取第一个用户相册。 3574. 调用MediaAlbumChangeRequest.deleteAlbums接口删除第一个用户相册。 358 359```ts 360import dataSharePredicates from '@ohos.data.dataSharePredicates'; 361import photoAccessHelper from '@ohos.file.photoAccessHelper'; 362const context = getContext(this); 363let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 364 365async function example() { 366 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 367 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 368 predicates.equalTo(albumName, 'albumName'); 369 let fetchOptions: photoAccessHelper.FetchOptions = { 370 fetchColumns: [], 371 predicates: predicates 372 }; 373 374 try { 375 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 376 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 377 console.info('getAlbums successfully, albumName: ' + album.albumName); 378 await photoAccessHelper.MediaAlbumChangeRequest.deleteAlbums(context, [album]); 379 fetchResult.close(); 380 } catch (err) { 381 console.error('deleteAlbums failed with err: ' + err); 382 } 383} 384``` 385