1# 用户相册资源使用指导 2<!--Kit: Media Library Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @yixiaoff--> 5<!--Designer: @liweilu1--> 6<!--Tester: @xchaosioda--> 7<!--Adviser: @zengyawen--> 8 9photoAccessHelper提供用户相册相关的接口,支持创建和删除相册,以及添加和删除相册中的图片和视频资源。 10 11> **说明:** 12> 13> 在进行功能开发前,请查阅[开发准备](photoAccessHelper-preparation.md),了解如何获取相册管理模块实例和申请相关权限。 14> 文档中使用到photoAccessHelper的地方默认为使用[开发准备](photoAccessHelper-preparation.md)中获取的对象,如未添加此段代码报photoAccessHelper未定义的错误请自行添加。 15 16为了保证应用的运行效率,大部分photoAccessHelper的接口调用都是异步的。以下异步调用的API示例均采用Promise函数,更多方式可以查阅[API参考](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper.md)。 17如无特别说明,文档中涉及的待获取资源均视为已预置,并且数据库中存在相应数据。如果按照示例代码执行后获取资源为空,请确认文件是否已预置,以及数据库中是否存在该文件的数据。 18 19<!--Del--> 20## 创建用户相册(仅向系统应用开放) 21 22通过[MediaAlbumChangeRequest.createAlbumRequest](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#createalbumrequest11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-PhotoAccessHelper.md#applychanges11)接口创建用户相册。 23 24待创建的相册名参数规格为: 25 26- 相册名字符串长度为1~255。 27- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 28- 英文字符大小写不敏感。 29- 相册名不允许重名。 30 31**前提条件** 32 33- 获取相册管理模块photoAccessHelper实例。 34- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.WRITE_IMAGEVIDEO'。 35 36下面以创建一个用户相册为例。 37 38**开发步骤** 39 401. 设置相册名。 412. 调用MediaAlbumChangeRequest.createAlbumRequest接口创建相册变更请求。 423. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 43 44```ts 45import { photoAccessHelper } from '@kit.MediaLibraryKit'; 46 47async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 48 try { 49 let albumName = 'albumName'; 50 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = photoAccessHelper.MediaAlbumChangeRequest.createAlbumRequest(context, albumName); 51 await phAccessHelper.applyChanges(albumChangeRequest); 52 let album: photoAccessHelper.Album = albumChangeRequest.getAlbum(); 53 console.info('create album successfully, album name: ' + album.albumName + ' uri: ' + album.albumUri); 54 } catch (err) { 55 console.error('create album failed with err: ' + err); 56 } 57} 58``` 59<!--DelEnd--> 60 61## 获取用户相册 62 63通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-PhotoAccessHelper.md#getalbums-2)接口获取用户相册。 64 65**前提条件** 66 67- 获取相册管理模块photoAccessHelper实例。 68- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。 69 70下面以获取一个相册名为'albumName'的用户相册为例。 71 72**开发步骤** 73 741. 建立检索条件,用于获取用户相册。 752. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 763. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一个用户相册。 77 78```ts 79import { dataSharePredicates } from '@kit.ArkData'; 80import { photoAccessHelper } from '@kit.MediaLibraryKit'; 81 82async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 83 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 84 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 85 predicates.equalTo(albumName, 'albumName'); 86 let fetchOptions: photoAccessHelper.FetchOptions = { 87 fetchColumns: [], 88 predicates: predicates 89 }; 90 91 try { 92 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 93 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 94 console.info('getAlbums successfully, albumName: ' + album.albumName); 95 fetchResult.close(); 96 } catch (err) { 97 console.error('getAlbums failed with err: ' + err); 98 } 99} 100``` 101 102## 重命名用户相册 103 104重命名用户相册时,修改的是相册的Album.albumName属性。 105 106调用[MediaAlbumChangeRequest.setAlbumName](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-MediaAlbumChangeRequest.md#setalbumname11)重命名用户相册后再通过[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-PhotoAccessHelper.md#applychanges11)更新到数据库中完成修改。 107 108在重命名用户相册之前,需要先获取相册对象,可以通过[FetchResult](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md)中的接口获取对应位置的用户相册。 109 110重命名相册时,相册名的参数规格为: 111 112- 相册名字符串长度为1~255。 113- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 114- 英文字符大小写不敏感。 115- 相册名不允许重名。 116 117**前提条件** 118 119- 获取相册管理模块photoAccessHelper实例。 120- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 121 122下面以将一个相册名为'albumName'的用户相册重命名为例。 123 124**开发步骤** 125 1261. 建立检索条件,用于获取用户相册。 1272. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 1283. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一个用户相册。 1294. 调用MediaAlbumChangeRequest.setAlbumName接口设置新的相册名。 1305. 调用PhotoAccessHelper.applyChanges接口将修改的相册属性更新到数据库中完成修改。 131 132```ts 133import { dataSharePredicates } from '@kit.ArkData'; 134import { photoAccessHelper } from '@kit.MediaLibraryKit'; 135 136async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 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/arkts-apis-photoAccessHelper-MediaAlbumChangeRequest.md#addassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-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/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject)接口获取第一个用户相册。 1785. 调用[PhotoAccessHelper.getAssets](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-PhotoAccessHelper.md#getassets)接口获取图片资源。 1796. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject)接口获取第一张图片。 1807. 调用MediaAlbumChangeRequest.addAssets接口往用户相册中添加图片。 1818. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 182 183```ts 184import { dataSharePredicates } from '@kit.ArkData'; 185import { photoAccessHelper } from '@kit.MediaLibraryKit'; 186 187async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 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/arkts-apis-photoAccessHelper-AbsAlbum.md#getassets-1)接口获取用户相册中的图片资源。 224 225**前提条件** 226 227- 获取相册管理模块photoAccessHelper实例。 228- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'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/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一个用户相册。 2385. 调用Album.getAssets接口获取用户相册中的图片资源。 2396. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一张图片。 240 241```ts 242import { dataSharePredicates } from '@kit.ArkData'; 243import { photoAccessHelper } from '@kit.MediaLibraryKit'; 244 245async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 246 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 247 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 248 albumPredicates.equalTo(albumName, 'albumName'); 249 let albumFetchOptions: photoAccessHelper.FetchOptions = { 250 fetchColumns: [], 251 predicates: albumPredicates 252 }; 253 254 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 255 let photoFetchOptions: photoAccessHelper.FetchOptions = { 256 fetchColumns: [], 257 predicates: photoPredicates 258 }; 259 260 try { 261 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 262 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 263 console.info('getAlbums successfully, albumName: ' + album.albumName); 264 let photoFetchResult = await album.getAssets(photoFetchOptions); 265 let photoAsset = await photoFetchResult.getFirstObject(); 266 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 267 albumFetchResult.close(); 268 photoFetchResult.close(); 269 } catch (err) { 270 console.error('album getAssets failed with err: ' + err); 271 } 272} 273``` 274 275## 从用户相册中移除图片和视频 276 277先[获取用户相册](#获取用户相册)对象,然后调用[Album.getAssets](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-AbsAlbum.md#getassets-1)接口获取用户相册中的资源。 278 279选择其中要移除的资源,然后调用[MediaAlbumChangeRequest.removeAssets](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-MediaAlbumChangeRequest.md#removeassets11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-PhotoAccessHelper.md#applychanges11)接口移除。 280 281**前提条件** 282 283- 获取相册管理模块photoAccessHelper实例。 284- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 285 286下面以从相册名为'albumName'的用户相册中移除一张图片为例。 287 288**开发步骤** 289 2901. 建立相册检索条件,用于获取用户相册。 2912. 建立图片检索条件,用于获取图片。 2923. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 2934. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一个用户相册。 2945. 调用Album.getAssets接口获取图片资源。 2956. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-FetchResult.md#getfirstobject-1)接口获取第一张图片。 2967. 调用MediaAlbumChangeRequest.removeAssets接口从用户相册中移除图片。 2978. 调用PhotoAccessHelper.applyChanges接口提交相册变更请求。 298 299```ts 300import { dataSharePredicates } from '@kit.ArkData'; 301import { photoAccessHelper } from '@kit.MediaLibraryKit'; 302 303async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 304 let albumPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 305 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 306 albumPredicates.equalTo(albumName, 'albumName'); 307 let albumFetchOptions: photoAccessHelper.FetchOptions = { 308 fetchColumns: [], 309 predicates: albumPredicates 310 }; 311 312 let photoPredicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 313 let photoFetchOptions: photoAccessHelper.FetchOptions = { 314 fetchColumns: [], 315 predicates: photoPredicates 316 }; 317 318 try { 319 let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, albumFetchOptions); 320 let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject(); 321 console.info('getAlbums successfully, albumName: ' + album.albumName); 322 let photoFetchResult = await album.getAssets(photoFetchOptions); 323 let photoAsset = await photoFetchResult.getFirstObject(); 324 console.info('album getAssets successfully, albumName: ' + photoAsset.displayName); 325 let albumChangeRequest: photoAccessHelper.MediaAlbumChangeRequest = new photoAccessHelper.MediaAlbumChangeRequest(album); 326 albumChangeRequest.removeAssets([photoAsset]); 327 await phAccessHelper.applyChanges(albumChangeRequest); 328 console.info('succeed to remove ' + photoAsset.displayName + ' from ' + album.albumName); 329 albumFetchResult.close(); 330 photoFetchResult.close(); 331 } catch (err) { 332 console.error('removeAssets failed with err: ' + err); 333 } 334} 335``` 336 337<!--Del--> 338## 删除用户相册(仅向系统应用开放) 339 340先[获取用户相册](#获取用户相册)对象,然后调用[MediaAlbumChangeRequest.deleteAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#deletealbums11)删除用户相册。 341 342**前提条件** 343 344- 获取相册管理模块photoAccessHelper实例。 345- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。 346 347下面以删除一个相册名为'albumName'的用户相册为例。 348 349**开发步骤** 350 3511. 建立检索条件,用于获取用户相册。 3522. 调用PhotoAccessHelper.getAlbums接口获取用户相册资源。 3533. 调用FetchResult.getFirstObject接口获取第一个用户相册。 3544. 调用MediaAlbumChangeRequest.deleteAlbums接口删除第一个用户相册。 355 356```ts 357import { dataSharePredicates } from '@kit.ArkData'; 358import { photoAccessHelper } from '@kit.MediaLibraryKit'; 359 360async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 361 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 362 let albumName: photoAccessHelper.AlbumKeys = photoAccessHelper.AlbumKeys.ALBUM_NAME; 363 predicates.equalTo(albumName, 'albumName'); 364 let fetchOptions: photoAccessHelper.FetchOptions = { 365 fetchColumns: [], 366 predicates: predicates 367 }; 368 369 try { 370 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.USER, photoAccessHelper.AlbumSubtype.USER_GENERIC, fetchOptions); 371 let album: photoAccessHelper.Album = await fetchResult.getFirstObject(); 372 console.info('getAlbums successfully, albumName: ' + album.albumName); 373 await photoAccessHelper.MediaAlbumChangeRequest.deleteAlbums(context, [album]); 374 fetchResult.close(); 375 } catch (err) { 376 console.error('deleteAlbums failed with err: ' + err); 377 } 378} 379``` 380<!--DelEnd--> 381