• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Interface (MovingPhoto)
2<!--Kit: Media Library Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @yixiaoff-->
5<!--Designer: @liweilu1-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9> **说明:**
10>
11> - 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12> - 本Interface首批接口从API version 12开始支持。
13
14动态照片对象。
15
16**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
17
18## 导入模块
19
20```ts
21import { photoAccessHelper } from '@kit.MediaLibraryKit';
22```
23
24## getUri<sup>12+</sup>
25
26getUri(): string
27
28获取动态照片的uri。
29
30**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
31
32**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
33
34**返回值:**
35
36| 类型                                    | 说明              |
37| --------------------------------------- | ----------------- |
38| string | 动态照片的uri。 |
39
40**错误码:**
41
42接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
43
44| 错误码ID | 错误信息 |
45| -------- | ---------------------------------------- |
46| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
47| 14000011 |  System inner fail.         |
48
49**示例:**
50
51phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
52
53```ts
54import { dataSharePredicates } from '@kit.ArkData';
55
56class MovingPhotoHandler implements photoAccessHelper.MediaAssetDataHandler<photoAccessHelper.MovingPhoto> {
57  async onDataPrepared(movingPhoto: photoAccessHelper.MovingPhoto) {
58    if (movingPhoto === undefined) {
59      console.error('Error occurred when preparing data');
60      return;
61    }
62    console.info("moving photo acquired successfully, uri: " + movingPhoto.getUri());
63  }
64}
65
66async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
67  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
68  predicates.equalTo(photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE, photoAccessHelper.PhotoSubtype.MOVING_PHOTO);
69  let fetchOptions: photoAccessHelper.FetchOptions = {
70    fetchColumns: [],
71    predicates: predicates
72  };
73  // 请确保图库内存在动态照片。
74  let assetResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
75  let asset: photoAccessHelper.PhotoAsset = await assetResult.getFirstObject();
76  let requestOptions: photoAccessHelper.RequestOptions = {
77    deliveryMode: photoAccessHelper.DeliveryMode.FAST_MODE,
78  }
79  const handler = new MovingPhotoHandler();
80  try {
81    let requestId: string = await photoAccessHelper.MediaAssetManager.requestMovingPhoto(context, asset, requestOptions, handler);
82    console.info("moving photo requested successfully, requestId: " + requestId);
83  } catch (err) {
84    console.error(`failed to request moving photo, error code is ${err.code}, message is ${err.message}`);
85  }
86}
87```
88
89## requestContent<sup>12+</sup>
90
91requestContent(imageFileUri: string, videoFileUri: string): Promise\<void>
92
93同时请求动态照片的图片内容和视频内容,并写入参数指定的对应的uri中。
94
95**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
96
97**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
98
99**需要权限**:ohos.permission.READ_IMAGEVIDEO
100
101- 通过picker的方式调用该接口来请求动态照片对象并读取内容,不需要申请'ohos.permission.READ_IMAGEVIDEO'权限,详情请参考[开发指南](../../media/medialibrary/photoAccessHelper-movingphoto.md)。
102- 对于本应用保存到媒体库的动态照片资源,应用无需额外申请'ohos.permission.READ_IMAGEVIDEO'权限即可访问。
103
104**参数:**
105
106| 参数名   | 类型                                                                   | 必填 | 说明                      |
107| -------- |----------------------------------------------------------------------| ---- | ------------------------- |
108| imageFileUri | string                      | 是   | 待写入动态照片图片内容的uri。示例imageFileUri为:"file://com.example.temptest/data/storage/el2/base/haps/ImageFile.jpg"。 |
109| videoFileUri | string                                            | 是   | 待写入动态照片视频内容的uri。示例videoFileUri为:"file://com.example.temptest/data/storage/el2/base/haps/VideoFile.mp4"。 |
110
111**返回值:**
112
113| 类型                                    | 说明              |
114| --------------------------------------- | ----------------- |
115| Promise\<void> | Promise对象,返回void。 |
116
117**错误码:**
118
119接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
120
121| 错误码ID | 错误信息 |
122| -------- | ---------------------------------------- |
123| 201      |  Permission denied   |
124| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
125| 14000011 |  System inner fail.        |
126
127**示例:**
128
129phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
130
131```ts
132import { dataSharePredicates } from '@kit.ArkData';
133
134class MovingPhotoHandler implements photoAccessHelper.MediaAssetDataHandler<photoAccessHelper.MovingPhoto> {
135  async onDataPrepared(movingPhoto: photoAccessHelper.MovingPhoto) {
136    if (movingPhoto === undefined) {
137      console.error('Error occurred when preparing data');
138      return;
139    }
140    // 应用需要确保待写入的uri是有效的。
141    let imageFileUri: string = "file://com.example.temptest/data/storage/el2/base/haps/ImageFile.jpg";
142    let videoFileUri: string = "file://com.example.temptest/data/storage/el2/base/haps/VideoFile.mp4";
143    try {
144      await movingPhoto.requestContent(imageFileUri, videoFileUri);
145      console.log("moving photo contents retrieved successfully");
146    } catch (err) {
147      console.error(`failed to retrieve contents of moving photo, error code is ${err.code}, message is ${err.message}`);
148    }
149  }
150}
151
152async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
153  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
154  predicates.equalTo(photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE, photoAccessHelper.PhotoSubtype.MOVING_PHOTO);
155  let fetchOptions: photoAccessHelper.FetchOptions = {
156    fetchColumns: [],
157    predicates: predicates
158  };
159  // 请确保图库内存在动态照片。
160  let assetResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
161  let asset: photoAccessHelper.PhotoAsset = await assetResult.getFirstObject();
162  let requestOptions: photoAccessHelper.RequestOptions = {
163    deliveryMode: photoAccessHelper.DeliveryMode.FAST_MODE,
164  }
165  const handler = new MovingPhotoHandler();
166  try {
167    let requestId: string = await photoAccessHelper.MediaAssetManager.requestMovingPhoto(context, asset, requestOptions, handler);
168    console.info("moving photo requested successfully, requestId: " + requestId);
169  } catch (err) {
170    console.error(`failed to request moving photo, error code is ${err.code}, message is ${err.message}`);
171  }
172}
173```
174
175## requestContent<sup>12+</sup>
176
177requestContent(resourceType: ResourceType, fileUri: string): Promise\<void>
178
179请求指定资源类型的动态照片内容,并写入参数指定的uri中。
180
181**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
182
183**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
184
185**需要权限**:ohos.permission.READ_IMAGEVIDEO
186
187- 通过picker调用接口请求动态照片对象并读取内容,不需要申请'ohos.permission.READ_IMAGEVIDEO'权限,详情请参考[开发指南](../../media/medialibrary/photoAccessHelper-movingphoto.md)。
188- 对于本应用保存到媒体库的动态照片资源,应用无需额外申请'ohos.permission.READ_IMAGEVIDEO'权限即可访问。
189
190**参数:**
191
192| 参数名   | 类型                                                                   | 必填 | 说明                      |
193| -------- |----------------------------------------------------------------------| ---- | ------------------------- |
194| resourceType | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11)                      | 是   | 所请求动态照片内容的资源类型。 |
195| fileUri | string                                                    | 是   |待写入动态照片内容的uri。 |
196
197**返回值:**
198
199| 类型                                    | 说明              |
200| --------------------------------------- | ----------------- |
201| Promise\<void> | Promise对象,返回void。 |
202
203**错误码:**
204
205接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
206
207| 错误码ID | 错误信息 |
208| -------- | ---------------------------------------- |
209| 201      |  Permission denied   |
210| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
211| 14000011 |  System inner fail.        |
212
213**示例:**
214
215phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
216
217```ts
218import { dataSharePredicates } from '@kit.ArkData';
219
220class MovingPhotoHandler implements photoAccessHelper.MediaAssetDataHandler<photoAccessHelper.MovingPhoto> {
221  async onDataPrepared(movingPhoto: photoAccessHelper.MovingPhoto) {
222    if (movingPhoto === undefined) {
223      console.error('Error occurred when preparing data');
224      return;
225    }
226    // 应用需要确保待写入的uri是有效的。
227    let imageFileUri: string = "file://com.example.temptest/data/storage/el2/base/haps/ImageFile.jpg";
228    try {
229      await movingPhoto.requestContent(photoAccessHelper.ResourceType.IMAGE_RESOURCE, imageFileUri);
230      console.log("moving photo image content retrieved successfully");
231    } catch (err) {
232      console.error(`failed to retrieve image content of moving photo, error code is ${err.code}, message is ${err.message}`);
233    }
234  }
235}
236
237async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
238  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
239  predicates.equalTo(photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE, photoAccessHelper.PhotoSubtype.MOVING_PHOTO);
240  let fetchOptions: photoAccessHelper.FetchOptions = {
241    fetchColumns: [],
242    predicates: predicates
243  };
244  // 请确保图库内存在动态照片。
245  let assetResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
246  let asset: photoAccessHelper.PhotoAsset = await assetResult.getFirstObject();
247  let requestOptions: photoAccessHelper.RequestOptions = {
248    deliveryMode: photoAccessHelper.DeliveryMode.FAST_MODE,
249  }
250  const handler = new MovingPhotoHandler();
251  try {
252    let requestId: string = await photoAccessHelper.MediaAssetManager.requestMovingPhoto(context, asset, requestOptions, handler);
253    console.info("moving photo requested successfully, requestId: " + requestId);
254  } catch (err) {
255    console.error(`failed to request moving photo, error code is ${err.code}, message is ${err.message}`);
256  }
257}
258```
259
260## requestContent<sup>12+</sup>
261
262requestContent(resourceType: ResourceType): Promise\<ArrayBuffer>
263
264请求指定资源类型的动态照片内容,以ArrayBuffer的形式返回。
265
266**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
267
268**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
269
270**需要权限**:ohos.permission.READ_IMAGEVIDEO
271
272- 使用picker调用该接口请求动态照片对象并读取内容时,不需要申请'ohos.permission.READ_IMAGEVIDEO'权限,详情请参考[开发指南](../../media/medialibrary/photoAccessHelper-movingphoto.md)。
273- 对于本应用保存到媒体库的动态照片资源,应用无需额外申请'ohos.permission.READ_IMAGEVIDEO'权限即可访问。
274
275**参数:**
276
277| 参数名   | 类型                                                                   | 必填 | 说明                      |
278| -------- |----------------------------------------------------------------------| ---- | ------------------------- |
279| resourceType | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11)                      | 是   | 所请求动态照片内容的资源类型。 |
280
281**返回值:**
282
283| 类型                                    | 说明              |
284| --------------------------------------- | ----------------- |
285| Promise\<ArrayBuffer> | Promise对象,返回包含所请求文件内容的ArrayBuffer。 |
286
287**错误码:**
288
289接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
290
291| 错误码ID | 错误信息 |
292| -------- | ---------------------------------------- |
293| 201      |  Permission denied   |
294| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
295| 14000011 |  System inner fail.        |
296
297**示例:**
298
299phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
300
301```ts
302import { dataSharePredicates } from '@kit.ArkData';
303
304class MovingPhotoHandler implements photoAccessHelper.MediaAssetDataHandler<photoAccessHelper.MovingPhoto> {
305  async onDataPrepared(movingPhoto: photoAccessHelper.MovingPhoto) {
306    if (movingPhoto === undefined) {
307      console.error('Error occurred when preparing data');
308      return;
309    }
310    try {
311      let buffer: ArrayBuffer = await movingPhoto.requestContent(photoAccessHelper.ResourceType.IMAGE_RESOURCE);
312      console.log("moving photo image content retrieved successfully, buffer length: " + buffer.byteLength);
313    } catch (err) {
314      console.error(`failed to retrieve image content of moving photo, error code is ${err.code}, message is ${err.message}`);
315    }
316  }
317}
318
319async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
320  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
321  predicates.equalTo(photoAccessHelper.PhotoKeys.PHOTO_SUBTYPE, photoAccessHelper.PhotoSubtype.MOVING_PHOTO);
322  let fetchOptions: photoAccessHelper.FetchOptions = {
323    fetchColumns: [],
324    predicates: predicates
325  };
326  // 请确保图库内存在动态照片。
327  let assetResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
328  let asset: photoAccessHelper.PhotoAsset = await assetResult.getFirstObject();
329  let requestOptions: photoAccessHelper.RequestOptions = {
330    deliveryMode: photoAccessHelper.DeliveryMode.FAST_MODE,
331  }
332  const handler = new MovingPhotoHandler();
333  try {
334    let requestId: string = await photoAccessHelper.MediaAssetManager.requestMovingPhoto(context, asset, requestOptions, handler);
335    console.info("moving photo requested successfully, requestId: " + requestId);
336  } catch (err) {
337    console.error(`failed to request moving photo, error code is ${err.code}, message is ${err.message}`);
338  }
339}
340```
341