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<!--Del--> 14## 创建用户相册(仅向系统应用开放) 15 16通过[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)接口创建用户相册。 17 18待创建的相册名参数规格为: 19 20- 相册名字符串长度为1~255。 21- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 22- 英文字符大小写不敏感。 23- 相册名不允许重名。 24 25**前提条件** 26 27- 获取相册管理模块photoAccessHelper实例。 28- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.WRITE_IMAGEVIDEO'。 29 30下面以创建一个用户相册为例。 31 32**开发步骤** 33 341. 设置相册名。 352. 调用MediaAlbumChangeRequest.createAlbumRequest接口创建相册变更请求。 363. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 37 38```ts 39import { photoAccessHelper } from '@kit.MediaLibraryKit'; 40const context = getContext(this); 41let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 42 43async function example() { 44 try { 45 let albumName = 'albumName'; 46 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = photoAccessHelper.MediaAlbumChangeRequest.createAlbumRequest(context, albumName); 47 await phAccessHelper.applyChanges(albumChangeRequest); 48 let album: photoAccessHelper.Album = albumChangeRequest.getAlbum(); 49 console.info('create album successfully, album name: ' + album.albumName + ' uri: ' + album.albumUri); 50 } catch (err) { 51 console.error('create album failed with err: ' + err); 52 } 53} 54``` 55<!--DelEnd--> 56 57## 获取用户相册 58 59通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getalbums-2)接口获取用户相册。 60 61**前提条件** 62 63- 获取相册管理模块photoAccessHelper实例。 64- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。 65 66下面以获取一个相册名为'albumName'的用户相册为例。 67 68**开发步骤** 69 701. 建立检索条件,用于获取用户相册。 712. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 723. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 73 74```ts 75import { dataSharePredicates } from '@kit.ArkData'; 76import { photoAccessHelper } from '@kit.MediaLibraryKit'; 77const context = getContext(this); 78let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 79 80async function example() { 81 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 82 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 83 predicates.equalTo(albumName, 'albumName'); 84 let fetchOptions: photoAccessHelper.FetchOptions = { 85 fetchColumns: [], 86 predicates: predicates 87 }; 88 89 try { 90 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 91 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 92 console.info('getAlbums successfully, albumName: ' + album.albumName); 93 fetchResult.close(); 94 } catch (err) { 95 console.error('getAlbums failed with err: ' + err); 96 } 97} 98``` 99 100## 重命名用户相册 101 102重命名用户相册修改的是相册的Album.albumName属性。 103 104调用[MediaAlbumChangeRequest.setAlbumName](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#setalbumname11)重命名用户相册后再通过[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)更新到数据库中完成修改。 105 106在重命名用户相册之前,需要先获取相册对象,可以通过[FetchResult](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#fetchresult)中的接口获取对应位置的用户相册。 107 108重命名的相册名参数规格为: 109 110- 相册名字符串长度为1~255。 111- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 112- 英文字符大小写不敏感。 113- 相册名不允许重名。 114 115**前提条件** 116 117- 获取相册管理模块photoAccessHelper实例。 118- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 119 120下面以将一个相册名为'albumName'的用户相册重命名为例。 121 122**开发步骤** 123 1241. 建立检索条件,用于获取用户相册。 1252. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 1263. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 1274. 调用MediaAlbumChangeRequest.setAlbumName接口设置新的相册名。 1285. 调用PhotoAccessHelper.applyChanges接口将修改的相册属性更新到数据中完成修改。 129 130```ts 131import { dataSharePredicates } from '@kit.ArkData'; 132import { photoAccessHelper } from '@kit.MediaLibraryKit'; 133const context = getContext(this); 134let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 135 136async function example() { 137 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 138 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 139 predicates.equalTo(albumName, 'albumName'); 140 let fetchOptions: photoAccessHelper.FetchOptions = { 141 fetchColumns: [], 142 predicates: predicates 143 }; 144 145 try { 146 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 147 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 148 console.info('getAlbums successfully, albumName: ' + album.albumName); 149 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 150 let newAlbumName: string = 'newAlbumName'; 151 albumChangeRequest.setAlbumName(newAlbumName); 152 await phAccessHelper.applyChanges(albumChangeRequest); 153 console.info('setAlbumName successfully, new albumName: ' + album.albumName); 154 fetchResult.close(); 155 } catch (err) { 156 console.error('setAlbumName failed with err: ' + err); 157 } 158} 159``` 160 161## 添加图片和视频到用户相册中 162 163先[获取用户相册](#获取用户相册)对象和需要添加到相册中的图片或视频的对象数组,然后调用[MediaAlbumChangeRequest.addAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#addassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口往用户相册中添加图片或视频。 164 165**前提条件** 166 167- 获取相册管理模块photoAccessHelper实例。 168- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 169 170下面以将往相册名为'albumName'的用户相册中添加一张图片为例。 171 172**开发步骤** 173 1741. 建立相册检索条件,用于获取用户相册。 1752. 建立图片检索条件,用于获取图片。 1763. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 1774. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject)接口获取第一个用户相册。 1785. 调用[PhotoAccessHelper.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets)接口获取图片资源。 1796. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject)接口获取第一张图片。 1807. 调用MediaAlbumChangeRequest.addAssets接口往用户相册中添加图片。 1818. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 182 183```ts 184import { dataSharePredicates } from '@kit.ArkData'; 185import { photoAccessHelper } from '@kit.MediaLibraryKit'; 186const context = getContext(this); 187let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 188 189async function example() { 190 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 191 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 192 albumPredicates.equalTo(albumName, 'albumName'); 193 let albumFetchOptions: photoAccessHelper.FetchOptions = { 194 fetchColumns: [], 195 predicates: albumPredicates 196 }; 197 198 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 199 let photoFetchOptions: photoAccessHelper.FetchOptions = { 200 fetchColumns: [], 201 predicates: photoPredicates 202 }; 203 204 try { 205 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 206 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 207 console.info('getAlbums successfully, albumName: ' + album.albumName); 208 let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(photoFetchOptions); 209 let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject(); 210 console.info('getAssets successfully, albumName: ' + photoAsset.displayName); 211 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 212 albumChangeRequest.addAssets([photoAsset]); 213 await phAccessHelper.applyChanges(albumChangeRequest); 214 console.info('succeed to add ' + photoAsset.displayName + ' to ' + album.albumName); 215 albumFetchResult.close(); 216 photoFetchResult.close(); 217 } catch (err) { 218 console.error('addAssets failed with err: ' + err); 219 } 220} 221``` 222 223## 获取用户相册中的图片和视频 224 225先[获取用户相册](#获取用户相册)对象,然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取用户相册中的图片资源。 226 227**前提条件** 228 229- 获取相册管理模块photoAccessHelper实例。 230- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 231 232下面以获取相册名为'albumName'的用户相册中的一张图片为例。 233 234**开发步骤** 235 2361. 建立相册检索条件,用于获取用户相册。 2372. 建立图片检索条件,用于获取图片。 2383. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 2394. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 2405. 调用Album.getAssets接口获取用户相册中的图片资源。 2416. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一张图片。 242 243```ts 244import { dataSharePredicates } from '@kit.ArkData'; 245import { photoAccessHelper } from '@kit.MediaLibraryKit'; 246const context = getContext(this); 247let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 248 249async function example() { 250 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 251 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 252 albumPredicates.equalTo(albumName, 'albumName'); 253 let albumFetchOptions: photoAccessHelper.FetchOptions = { 254 fetchColumns: [], 255 predicates: albumPredicates 256 }; 257 258 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 259 let photoFetchOptions: photoAccessHelper.FetchOptions = { 260 fetchColumns: [], 261 predicates: photoPredicates 262 }; 263 264 try { 265 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 266 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 267 console.info('getAlbums successfully, albumName: ' + album.albumName); 268 let photoFetchResult = await album.getAssets(photoFetchOptions); 269 let photoAsset = await photoFetchResult.getFirstObject(); 270 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 271 albumFetchResult.close(); 272 photoFetchResult.close(); 273 } catch (err) { 274 console.error('album getAssets failed with err: ' + err); 275 } 276} 277``` 278 279## 从用户相册中移除图片和视频 280 281先[获取用户相册](#获取用户相册)对象,然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取用户相册中的资源。 282 283选择其中要移除的资源,然后调用[MediaAlbumChangeRequest.removeAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#removeassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口移除。 284 285**前提条件** 286 287- 获取相册管理模块photoAccessHelper实例。 288- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 289 290下面以将往相册名为'albumName'的用户相册中移除一张图片为例。 291 292**开发步骤** 293 2941. 建立相册检索条件,用于获取用户相册。 2952. 建立图片检索条件,用于获取图片。 2963. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 2974. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个用户相册。 2985. 调用Album.getAssets接口获取图片资源。 2996. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一张图片。 3007. 调用MediaAlbumChangeRequest.removeAssets接口从用户相册中移除图片。 3018. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 302 303```ts 304import { dataSharePredicates } from '@kit.ArkData'; 305import { photoAccessHelper } from '@kit.MediaLibraryKit'; 306const context = getContext(this); 307let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 308 309async function example() { 310 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 311 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 312 albumPredicates.equalTo(albumName, 'albumName'); 313 let albumFetchOptions: photoAccessHelper.FetchOptions = { 314 fetchColumns: [], 315 predicates: albumPredicates 316 }; 317 318 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 319 let photoFetchOptions: photoAccessHelper.FetchOptions = { 320 fetchColumns: [], 321 predicates: photoPredicates 322 }; 323 324 try { 325 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 326 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 327 console.info('getAlbums successfully, albumName: ' + album.albumName); 328 let photoFetchResult = await album.getAssets(photoFetchOptions); 329 let photoAsset = await photoFetchResult.getFirstObject(); 330 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 331 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 332 albumChangeRequest.removeAssets([photoAsset]); 333 await phAccessHelper.applyChanges(albumChangeRequest); 334 console.info('succeed to remove ' + photoAsset.displayName + ' from ' + album.albumName); 335 albumFetchResult.close(); 336 photoFetchResult.close(); 337 } catch (err) { 338 console.error('removeAssets failed with err: ' + err); 339 } 340} 341``` 342 343<!--Del--> 344## 删除用户相册(仅向系统应用开放) 345 346先[获取用户相册](#获取用户相册)对象,然后调用[MediaAlbumChangeRequest.deleteAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#deletealbums11)删除用户相册。 347 348**前提条件** 349 350- 获取相册管理模块photoAccessHelper实例。 351- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 352 353下面以删除一个相册名为'albumName'的用户相册为例。 354 355**开发步骤** 356 3571. 建立检索条件,用于获取用户相册。 3582. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 3593. 调用FetchResult.getFirstObject接口获取第一个用户相册。 3604. 调用MediaAlbumChangeRequest.deleteAlbums接口删除第一个用户相册。 361 362```ts 363import { dataSharePredicates } from '@kit.ArkData'; 364import { photoAccessHelper } from '@kit.MediaLibraryKit'; 365const context = getContext(this); 366let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 367 368async function example() { 369 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 370 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 371 predicates.equalTo(albumName, 'albumName'); 372 let fetchOptions: photoAccessHelper.FetchOptions = { 373 fetchColumns: [], 374 predicates: predicates 375 }; 376 377 try { 378 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 379 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 380 console.info('getAlbums successfully, albumName: ' + album.albumName); 381 await photoAccessHelper.MediaAlbumChangeRequest.deleteAlbums(context, [album]); 382 fetchResult.close(); 383 } catch (err) { 384 console.error('deleteAlbums failed with err: ' + err); 385 } 386} 387``` 388<!--DelEnd--> 389