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收藏夹属于系统相册,对图片或视频设置收藏时会自动将其加入到收藏夹中,取消收藏则会从收藏夹中移除。
16
17### 获取收藏夹对象
18
19通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getalbums-2)接口获取收藏夹对象。
20
21**前提条件**
22
23- 获取相册管理模块photoAccessHelper实例。
24- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
25
26**开发步骤**
27
281. 设置获取收藏夹的参数为photoAccessHelper.AlbumType.SYSTEMphotoAccessHelper.AlbumSubtype.FAVORITE292. 调用PhotoAccessHelper.getAlbums接口获取收藏夹对象。
30
31```ts
32import { photoAccessHelper } from '@kit.MediaLibraryKit';
33const context = getContext(this);
34let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
35
36async function example() {
37  try {
38    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.FAVORITE);
39    let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
40    console.info('get favorite album successfully, albumUri: ' + album.albumUri);
41    fetchResult.close();
42  } catch (err) {
43    console.error('get favorite album failed with err: ' + err);
44  }
45}
46```
47
48<!--Del-->
49### 收藏图片和视频(仅向系统应用开放)
50
51通过[MediaAssetChangeRequest.setFavorite](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#setfavorite11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口将图片或视频设置为收藏。
52
53**前提条件**
54
55- 获取相册管理模块photoAccessHelper实例。
56- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。
57
58下面将以收藏一张图片为例。
59
60**开发步骤**
61
621. [获取指定媒体资源](photoAccessHelper-resource-guidelines.md#获取指定媒体资源)。
632. 调用MediaAssetChangeRequest.setFavorite接口将图片设置为收藏。
643. 调用PhotoAccessHelper.applyChanges接口提交收藏图片的变更请求。
65
66```ts
67import { dataSharePredicates } from '@kit.ArkData';
68import { photoAccessHelper } from '@kit.MediaLibraryKit';
69const context = getContext(this);
70let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
71
72async function example() {
73  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
74  predicates.equalTo(photoAccessHelper.PhotoKeys.DISPLAY_NAME, 'test.jpg');
75  let fetchOptions: photoAccessHelper.FetchOptions = {
76    fetchColumns: [],
77    predicates: predicates
78  };
79
80  try {
81    let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
82    let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject();
83    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset);
84    let favoriteState = true;
85    assetChangeRequest.setFavorite(favoriteState);
86    await phAccessHelper.applyChanges(assetChangeRequest);
87  } catch (err) {
88    console.error('setFavorite failed with err: ' + err);
89  }
90}
91```
92<!--DelEnd-->
93
94### 获取收藏夹中的图片和视频
95
96先[获取收藏夹对象](#获取收藏夹对象)。然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取收藏夹中的资源。
97
98**前提条件**
99
100- 获取相册管理模块photoAccessHelper实例。
101- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
102
103下面以获取收藏夹中的一张图片为例。
104
105**开发步骤**
106
1071. [获取收藏夹对象](#获取收藏夹对象)。
1082. 建立图片检索条件,用于获取图片。
1093. 调用Album.getAssets接口获取图片资源。
1104. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一张图片。
111
112```ts
113import { dataSharePredicates } from '@kit.ArkData';
114import { photoAccessHelper } from '@kit.MediaLibraryKit';
115const context = getContext(this);
116let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
117
118async function example() {
119  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
120  let fetchOptions: photoAccessHelper.FetchOptions = {
121    fetchColumns: [],
122    predicates: predicates
123  };
124
125  try {
126    let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.FAVORITE);
127    let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
128    console.info('get favorite album successfully, albumUri: ' + album.albumUri);
129
130    let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await album.getAssets(fetchOptions);
131    let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject();
132    console.info('favorite album getAssets successfully, photoAsset displayName: ' + photoAsset.displayName);
133    photoFetchResult.close();
134    albumFetchResult.close();
135  } catch (err) {
136    console.error('favorite failed with err: ' + err);
137  }
138}
139```
140
141<!--Del-->
142### 取消收藏图片或视频(仅向系统应用开放)
143
144通过[MediaAssetChangeRequest.setFavorite](../../reference/apis-media-library-kit/js-apis-photoAccessHelper-sys.md#setfavorite11)和[PhotoAccessHelper.applyChanges](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#applychanges11)接口将图片或视频取消收藏。
145
146**前提条件**
147
148- 获取相册管理模块photoAccessHelper实例。
149- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'和'ohos.permission.WRITE_IMAGEVIDEO'。
150
151下面以将一张图片取消收藏为例。
152
153**开发步骤**
154
1551. [获取收藏夹中的图片和视频](#获取收藏夹中的图片和视频)。
1562. 调用MediaAssetChangeRequest.setFavorite接口将图片设置为取消收藏。
1573. 调用PhotoAccessHelper.applyChanges接口提交取消收藏图片的变更请求。
158
159
160```ts
161import { dataSharePredicates } from '@kit.ArkData';
162import { photoAccessHelper } from '@kit.MediaLibraryKit';
163const context = getContext(this);
164let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
165
166async function example() {
167  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
168  let fetchOptions: photoAccessHelper.FetchOptions = {
169    fetchColumns: [],
170    predicates: predicates
171  };
172
173  try {
174    let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.FAVORITE);
175    let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
176    console.info('get favorite album successfully, albumUri: ' + album.albumUri);
177
178    let photoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await album.getAssets(fetchOptions);
179    let photoAsset: photoAccessHelper.PhotoAsset = await photoFetchResult.getFirstObject();
180    console.info('favorite album getAssets successfully, photoAsset displayName: ' + photoAsset.displayName);
181
182    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset);
183    let favoriteState = false;
184    assetChangeRequest.setFavorite(favoriteState);
185    await phAccessHelper.applyChanges(assetChangeRequest);
186    photoFetchResult.close();
187    albumFetchResult.close();
188  } catch (err) {
189    console.error('setFavorite failed with err: ' + err);
190  }
191}
192```
193<!--DelEnd-->
194
195## 视频相册
196
197视频相册属于系统相册,用户文件中属于视频类型的媒体文件会自动加入到视频相册中。
198
199### 获取视频相册对象
200
201通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getalbums-2)接口获取视频相册对象。
202
203**前提条件**
204
205- 获取相册管理模块photoAccessHelper实例。
206- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
207
208**开发步骤**
209
2101. 设置获取视频相册的参数为photoAccessHelper.AlbumType.SYSTEMphotoAccessHelper.AlbumSubtype.VIDEO2112. 调用PhotoAccessHelper.getAlbums接口获取视频相册。
212
213```ts
214import { photoAccessHelper } from '@kit.MediaLibraryKit';
215const context = getContext(this);
216let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
217
218async function example() {
219  try {
220    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.VIDEO);
221    let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
222    console.info('get video album successfully, albumUri: ' + album.albumUri);
223    fetchResult.close();
224  } catch (err) {
225    console.error('get video album failed with err: ' + err);
226  }
227}
228```
229
230### 获取视频相册中的视频
231
232先[获取视频相册对象](#获取视频相册对象)。然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取视频相册对象中的视频资源。
233
234**前提条件**
235
236- 获取相册管理模块photoAccessHelper实例。
237- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
238
239下面以获取视频相册中的一个视频为例。
240
241**开发步骤**
242
2431. 先[获取视频相册对象](#获取视频相册对象)。
2442. 建立视频检索条件,用于获取视频。
2453. 调用Album.getAssets接口获取视频资源。
2464. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个视频。
247
248```ts
249import { dataSharePredicates } from '@kit.ArkData';
250import { photoAccessHelper } from '@kit.MediaLibraryKit';
251const context = getContext(this);
252let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
253
254async function example() {
255  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
256  let fetchOptions: photoAccessHelper.FetchOptions = {
257    fetchColumns: [],
258    predicates: predicates
259  };
260
261  try {
262    let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.VIDEO);
263    let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
264    console.info('get video album successfully, albumUri: ' + album.albumUri);
265
266    let videoFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await album.getAssets(fetchOptions);
267    let photoAsset: photoAccessHelper.PhotoAsset = await videoFetchResult.getFirstObject();
268    console.info('video album getAssets successfully, photoAsset displayName: ' + photoAsset.displayName);
269    videoFetchResult.close();
270    albumFetchResult.close();
271  } catch (err) {
272    console.error('video failed with err: ' + err);
273  }
274}
275```
276
277<!--Del-->
278## 截屏和录屏相册(仅向系统应用开放)
279
280截屏和录屏相册属于系统相册,用户文件中属于截屏和录屏的媒体文件会自动加入到截屏和录屏相册中。
281
282### 获取截屏和录屏相册对象
283
284通过[PhotoAccessHelper.getAlbums](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getalbums-2)接口获取截屏和录屏相册对象。
285
286**前提条件**
287
288- 获取相册管理模块photoAccessHelper实例。
289- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
290
291**开发步骤**
292
2931. 设置获取截屏和录屏相册的参数为photoAccessHelper.AlbumType.SYSTEMphotoAccessHelper.AlbumSubtype.SCREENSHOT2942. 调用PhotoAccessHelper.getAlbums接口获取截屏和录屏相册。
295
296```ts
297import { photoAccessHelper } from '@kit.MediaLibraryKit';
298const context = getContext(this);
299let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
300
301async function example() {
302  try {
303    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.SCREENSHOT);
304    let album: photoAccessHelper.Album = await fetchResult.getFirstObject();
305    console.info('get screenshot album successfully, albumUri: ' + album.albumUri);
306    fetchResult.close();
307  } catch (err) {
308    console.error('get screenshot album failed with err: ' + err);
309  }
310}
311```
312
313### 获取截屏和录屏相册中的媒体资源
314
315先[获取截屏和录屏相册对象](#获取截屏和录屏相册对象)。然后调用[Album.getAssets](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getassets-3)接口获取截屏和录屏相册对象中的媒体资源。
316
317**前提条件**
318
319- 获取相册管理模块photoAccessHelper实例。
320- [申请相册管理模块权限](photoAccessHelper-preparation.md#申请相册管理模块功能相关权限)'ohos.permission.READ_IMAGEVIDEO'。
321
322下面以获取截屏和录屏相册中的一个媒体资源为例。
323
324**开发步骤**
325
3261. 先[获取截屏和录屏相册对象](#获取截屏和录屏相册对象)。
3272. 建立检索条件,用于获取媒体资源。
3283. 调用Album.getAssets接口获取媒体资源。
3294. 调用[FetchResult.getFirstObject](../../reference/apis-media-library-kit/js-apis-photoAccessHelper.md#getfirstobject-1)接口获取第一个媒体资源。
330
331```ts
332import { dataSharePredicates } from '@kit.ArkData';
333import { photoAccessHelper } from '@kit.MediaLibraryKit';
334const context = getContext(this);
335let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
336
337async function example() {
338  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
339  let fetchOptions: photoAccessHelper.FetchOptions = {
340    fetchColumns: [],
341    predicates: predicates
342  };
343
344  try {
345    let albumFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = await phAccessHelper.getAlbums(photoAccessHelper.AlbumType.SYSTEM, photoAccessHelper.AlbumSubtype.SCREENSHOT);
346    let album: photoAccessHelper.Album = await albumFetchResult.getFirstObject();
347    console.info('get screenshot album successfully, albumUri: ' + album.albumUri);
348
349    let screenshotFetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await album.getAssets(fetchOptions);
350    let photoAsset: photoAccessHelper.PhotoAsset = await screenshotFetchResult.getFirstObject();
351    console.info('screenshot album getAssets successfully, photoAsset displayName: ' + photoAsset.displayName);
352    screenshotFetchResult.close();
353    albumFetchResult.close();
354  } catch (err) {
355    console.error('screenshot album failed with err: ' + err);
356  }
357}
358```
359<!--DelEnd-->
360