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