1# Class (MediaAssetChangeRequest) 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> - 本Class首批接口从API version 11开始支持。 13 14MediaAssetChangeRequest implements [MediaChangeRequest](arkts-apis-photoAccessHelper-i.md#mediachangerequest11) 15 16资产变更请求。 17 18**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 19 20## 导入模块 21 22```ts 23import { photoAccessHelper } from '@kit.MediaLibraryKit'; 24``` 25 26## constructor<sup>11+</sup> 27 28constructor(asset: PhotoAsset) 29 30构造函数,用于初始化资产变更请求。 31 32**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 33 34**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 35 36**参数:** 37 38| 参数名 | 类型 | 必填 | 说明 | 39| -------- | ------------------------- | ---- | ---------- | 40| asset | [PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md) | 是 | 需要变更的资产。 | 41 42**错误码:** 43 44接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 45 46| 错误码ID | 错误信息 | 47| -------- | ---------------------------------------- | 48| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 49| 14000011 | System inner fail. | 50 51**示例:** 52 53phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 54 55```ts 56import { dataSharePredicates } from '@kit.ArkData'; 57 58async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 59 console.info('MediaAssetChangeRequest constructorDemo'); 60 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 61 let fetchOptions: photoAccessHelper.FetchOptions = { 62 fetchColumns: [], 63 predicates: predicates 64 }; 65 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); 66 let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); 67 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset); 68} 69``` 70 71## createImageAssetRequest<sup>11+</sup> 72 73static createImageAssetRequest(context: Context, fileUri: string): MediaAssetChangeRequest 74 75创建图片资产变更请求。 76 77指定待创建资产的数据来源,可参考[FileUri](../apis-core-file-kit/js-apis-file-fileuri.md)。 78 79**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 80 81**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 82 83**参数:** 84 85| 参数名 | 类型 | 必填 | 说明 | 86| ------- | ------- | ---- | -------------------------- | 87| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 传入Ability实例的上下文。 | 88| fileUri | string | 是 | 图片资产的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'。 | 89 90**返回值:** 91 92| 类型 | 说明 | 93| --------------------------------------- | ----------------- | 94| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 | 95 96**错误码:** 97 98接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 99 100| 错误码ID | 错误信息 | 101| -------- | ---------------------------------------- | 102| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 103| 13900002 | The file corresponding to the URI is not in the app sandbox. | 104| 14000011 | System inner fail. | 105 106**示例:** 107 108phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 109 110```ts 111async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 112 console.info('createImageAssetRequestDemo'); 113 try { 114 // 需要确保fileUri对应的资源存在。 115 let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'; 116 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(context, fileUri); 117 await phAccessHelper.applyChanges(assetChangeRequest); 118 console.info('apply createImageAssetRequest successfully'); 119 } catch (err) { 120 console.error(`createImageAssetRequestDemo failed with error: ${err.code}, ${err.message}`); 121 } 122} 123``` 124 125## createVideoAssetRequest<sup>11+</sup> 126 127static createVideoAssetRequest(context: Context, fileUri: string): MediaAssetChangeRequest 128 129创建视频资产变更请求。 130 131指定待创建资产的数据来源,可参考[FileUri](../apis-core-file-kit/js-apis-file-fileuri.md)。 132 133**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 134 135**参数:** 136 137| 参数名 | 类型 | 必填 | 说明 | 138| ------- | ------- | ---- | -------------------------- | 139| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 传入Ability实例的上下文。 | 140| fileUri | string | 是 | 视频资产的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.mp4'。 | 141 142**返回值:** 143 144| 类型 | 说明 | 145| --------------------------------------- | ----------------- | 146| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 | 147 148**错误码:** 149 150接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 151 152| 错误码ID | 错误信息 | 153| -------- | ---------------------------------------- | 154| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 155| 13900002 | The file corresponding to the URI is not in the app sandbox. | 156| 14000011 | System inner fail. | 157 158**示例:** 159 160phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 161 162```ts 163async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 164 console.info('createVideoAssetRequestDemo'); 165 try { 166 // 需要确保fileUri对应的资源存在。 167 let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.mp4'; 168 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createVideoAssetRequest(context, fileUri); 169 await phAccessHelper.applyChanges(assetChangeRequest); 170 console.info('apply createVideoAssetRequest successfully'); 171 } catch (err) { 172 console.error(`createVideoAssetRequestDemo failed with error: ${err.code}, ${err.message}`); 173 } 174} 175``` 176 177## createAssetRequest<sup>11+</sup> 178 179static createAssetRequest(context: Context, photoType: PhotoType, extension: string, options?: CreateOptions): MediaAssetChangeRequest 180 181指定文件类型和扩展名,创建资产变更请求。 182 183**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 184 185**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 186 187**参数:** 188 189| 参数名 | 类型 | 必填 | 说明 | 190| ------- | ------- | ---- | -------------------------- | 191| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 传入Ability实例的上下文。 | 192| photoType | [PhotoType](arkts-apis-photoAccessHelper-e.md#phototype) | 是 | 待创建的文件类型,IMAGE或者VIDEO类型。 | 193| extension | string | 是 | 文件扩展名,例如:'jpg'。 | 194| options | [CreateOptions](arkts-apis-photoAccessHelper-i.md#createoptions) | 否 | 创建选项,例如:{title: 'testPhoto'}。<br>文件名中不允许出现非法英文字符,包括: . .. \ / : * ? " ' ` < > \| { } [ ]| 195 196**返回值:** 197 198| 类型 | 说明 | 199| --------------------------------------- | ----------------- | 200| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 | 201 202**错误码:** 203 204接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 205 206| 错误码ID | 错误信息 | 207| -------- | ---------------------------------------- | 208| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 209| 14000011 | System inner fail. | 210 211**示例:** 212 213phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 214 215```ts 216async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 217 console.info('createAssetRequestDemo'); 218 try { 219 let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE; 220 let extension: string = 'jpg'; 221 let options: photoAccessHelper.CreateOptions = { 222 title: 'testPhoto' 223 } 224 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension, options); 225 // 需要确保fileUri对应的资源存在。 226 let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'; 227 assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, fileUri); 228 await phAccessHelper.applyChanges(assetChangeRequest); 229 console.info('apply createAssetRequest successfully'); 230 } catch (err) { 231 console.error(`createAssetRequestDemo failed with error: ${err.code}, ${err.message}`); 232 } 233} 234``` 235 236## deleteAssets<sup>11+</sup> 237 238static deleteAssets(context: Context, assets: Array<PhotoAsset>): Promise<void> 239 240删除媒体文件,删除的文件进入到回收站,使用Promise方式返回结果。 241 242**需要权限**:ohos.permission.WRITE_IMAGEVIDEO 243 244**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 245 246**参数:** 247 248| 参数名 | 类型 | 必填 | 说明 | 249| ------- | ------- | ---- | -------------------------- | 250| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 传入Ability实例的上下文。 | 251| assets | Array<[PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md)> | 是 | 待删除的媒体文件数组,数组中元素个数不超过300个。<!--Del-->系统应用对此无限制。<!--DelEnd--> | 252 253**返回值:** 254 255| 类型 | 说明 | 256| --------------------------------------- | ----------------- | 257| Promise<void>| Promise对象,返回void。 | 258 259**错误码:** 260 261接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 262 263| 错误码ID | 错误信息 | 264| -------- | ---------------------------------------- | 265| 201 | Permission denied. | 266| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 267| 14000011 | System inner fail. | 268 269**示例:** 270 271phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 272 273```ts 274import { dataSharePredicates } from '@kit.ArkData'; 275 276async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 277 console.info('deleteAssetsDemo'); 278 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 279 let fetchOptions: photoAccessHelper.FetchOptions = { 280 fetchColumns: [], 281 predicates: predicates 282 }; 283 try { 284 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); 285 let photoAssetList: Array<photoAccessHelper.PhotoAsset> = await fetchResult.getAllObjects(); 286 await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, photoAssetList); 287 console.info('deleteAssets successfully'); 288 } catch (err) { 289 console.error(`deleteAssetsDemo failed with error: ${err.code}, ${err.message}`); 290 } 291} 292``` 293 294## deleteAssets<sup>11+</sup> 295 296static deleteAssets(context: Context, uriList: Array<string>): Promise<void> 297 298删除媒体文件,删除的文件进入到回收站,使用Promise方式返回结果。 299 300**需要权限**:ohos.permission.WRITE_IMAGEVIDEO 301 302**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 303 304**参数:** 305 306| 参数名 | 类型 | 必填 | 说明 | 307| ------- | ------- | ---- | -------------------------- | 308| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是 | 传入Ability实例的上下文。 | 309| uriList | Array<string> | 是 | 待删除的媒体文件uri数组,数组中元素个数不超过300个。<!--Del-->系统应用对此无限制。<!--DelEnd--> | 310 311**返回值:** 312 313| 类型 | 说明 | 314| --------------------------------------- | ----------------- | 315| Promise<void>| Promise对象,返回void。 | 316 317**错误码:** 318 319接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 320 321| 错误码ID | 错误信息 | 322| -------- | ---------------------------------------- | 323| 201 | Permission denied. | 324| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 325| 14000002 | The uri format is incorrect or does not exist. | 326| 14000011 | System inner fail. | 327 328**示例:** 329 330phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 331 332```ts 333import { dataSharePredicates } from '@kit.ArkData'; 334 335async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 336 console.info('deleteAssetsDemo'); 337 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 338 let fetchOptions: photoAccessHelper.FetchOptions = { 339 fetchColumns: [], 340 predicates: predicates 341 }; 342 try { 343 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions); 344 let asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject(); 345 await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [asset.uri]); 346 console.info('deleteAssets successfully'); 347 } catch (err) { 348 console.error(`deleteAssetsDemo failed with error: ${err.code}, ${err.message}`); 349 } 350} 351``` 352 353## getAsset<sup>11+</sup> 354 355getAsset(): PhotoAsset 356 357获取当前资产变更请求中的资产。 358 359**注意**:对于创建资产的变更请求,在调用[applyChanges](arkts-apis-photoAccessHelper-PhotoAccessHelper.md#applychanges11)提交生效之前,该接口返回null。 360 361**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 362 363**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 364 365**返回值:** 366 367| 类型 | 说明 | 368| --------------------------------------- | ----------------- | 369| [PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md) | 返回当前资产变更请求中的资产。 | 370 371**错误码:** 372 373接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 374 375| 错误码ID | 错误信息 | 376| -------- | ---------------------------------------- | 377| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 378| 14000011 | System inner fail. | 379 380**示例:** 381 382phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 383 384```ts 385async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 386 console.info('getAssetDemo'); 387 try { 388 // 需要确保fileUri对应的资源存在。 389 let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'; 390 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(context, fileUri); 391 await phAccessHelper.applyChanges(assetChangeRequest); 392 let asset: photoAccessHelper.PhotoAsset = assetChangeRequest.getAsset(); 393 console.info('create asset successfully with uri = ' + asset.uri); 394 } catch (err) { 395 console.error(`getAssetDemo failed with error: ${err.code}, ${err.message}`); 396 } 397} 398``` 399 400## setTitle<sup>11+</sup> 401 402setTitle(title: string): void 403 404修改媒体资产的标题。 405 406**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 407 408**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 409 410**参数:** 411 412| 参数名 | 类型 | 必填 | 说明 | 413| ---------- | ------- | ---- | ---------------------------------- | 414| title | string | 是 | 待修改的资产标题。 | 415 416title参数规格为: 417- 不应包含扩展名。 418- 文件名字符串长度为1~255。 419- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ] 420 421**错误码:** 422 423接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 424 425| 错误码ID | 错误信息 | 426| -------- | ---------------------------------------- | 427| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 428| 14000011 | System inner fail. | 429 430**示例:** 431 432phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 433 434```ts 435import { dataSharePredicates } from '@kit.ArkData'; 436import { BusinessError } from '@kit.BasicServicesKit'; 437 438async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 439 console.info('setTitleDemo'); 440 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 441 let fetchOption: photoAccessHelper.FetchOptions = { 442 fetchColumns: [], 443 predicates: predicates 444 }; 445 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption); 446 let asset = await fetchResult.getFirstObject(); 447 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 448 let newTitle: string = 'newTitle'; 449 assetChangeRequest.setTitle(newTitle); 450 phAccessHelper.applyChanges(assetChangeRequest).then(() => { 451 console.info('apply setTitle successfully'); 452 }).catch((err: BusinessError) => { 453 console.error(`apply setTitle failed with error: ${err.code}, ${err.message}`); 454 }); 455} 456``` 457 458## getWriteCacheHandler<sup>11+</sup> 459 460getWriteCacheHandler(): Promise<number> 461 462获取临时文件写句柄。 463 464**注意**:对于同一个资产变更请求,不支持在成功获取临时文件写句柄后,重复调用该接口。 465 466**需要权限**:ohos.permission.WRITE_IMAGEVIDEO 467 468**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 469 470**返回值:** 471 472| 类型 | 说明 | 473| --------------------------------------- | ----------------- | 474| Promise<number> | Promise对象,返回临时文件写句柄。 | 475 476**错误码:** 477 478接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 479 480| 错误码ID | 错误信息 | 481| -------- | ---------------------------------------- | 482| 201 | Permission denied. | 483| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 484| 14000011 | System inner fail. | 485| 14000016 | Operation Not Support. | 486 487**示例:** 488 489phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 490 491```ts 492import { fileIo } from '@kit.CoreFileKit'; 493 494async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 495 console.info('getWriteCacheHandlerDemo'); 496 try { 497 let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.VIDEO; 498 let extension: string = 'mp4'; 499 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension); 500 let fd: number = await assetChangeRequest.getWriteCacheHandler(); 501 console.info('getWriteCacheHandler successfully'); 502 // write date into fd.. 503 await fileIo.close(fd); 504 await phAccessHelper.applyChanges(assetChangeRequest); 505 } catch (err) { 506 console.error(`getWriteCacheHandlerDemo failed with error: ${err.code}, ${err.message}`); 507 } 508} 509``` 510 511## addResource<sup>11+</sup> 512 513addResource(type: ResourceType, fileUri: string): void 514 515通过[fileUri](../apis-core-file-kit/js-apis-file-fileuri.md)从应用沙箱添加资源。 516 517**注意**:对于同一个资产变更请求,成功添加资源后不支持重复调用该接口。对于动态照片,可调用两次该接口分别添加图片和视频资源。 518 519**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 520 521**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 522 523**参数:** 524 525| 参数名 | 类型 | 必填 | 说明 | 526| ------- | ------- | ---- | -------------------------- | 527| type | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11) | 是 | 待添加资源的类型。 | 528| fileUri | string | 是 | 待添加资源的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'。 | 529 530**错误码:** 531 532接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 533 534| 错误码ID | 错误信息 | 535| -------- | ---------------------------------------- | 536| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 537| 13900002 | The file corresponding to the URI is not in the app sandbox. | 538| 14000011 | System inner fail. | 539| 14000016 | Operation Not Support. | 540 541**示例:** 542 543phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 544 545```ts 546async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 547 console.info('addResourceByFileUriDemo'); 548 try { 549 let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE; 550 let extension: string = 'jpg'; 551 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension); 552 // 需要确保fileUri对应的资源存在。 553 let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'; 554 assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, fileUri); 555 await phAccessHelper.applyChanges(assetChangeRequest); 556 console.info('addResourceByFileUri successfully'); 557 } catch (err) { 558 console.error(`addResourceByFileUriDemo failed with error: ${err.code}, ${err.message}`); 559 } 560} 561``` 562 563## addResource<sup>11+</sup> 564 565addResource(type: ResourceType, data: ArrayBuffer): void 566 567通过ArrayBuffer数据添加资源。 568 569**注意**:对于同一个资产变更请求,成功添加资源后不支持重复调用该接口。对于动态照片,可调用两次该接口分别添加图片和视频资源。 570 571**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 572 573**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 574 575**参数:** 576 577| 参数名 | 类型 | 必填 | 说明 | 578| ------- | ------- | ---- | -------------------------- | 579| type | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11) | 是 | 待添加资源的类型。 | 580| data | ArrayBuffer | 是 | 待添加资源的数据。 | 581 582**错误码:** 583 584接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 585 586| 错误码ID | 错误信息 | 587| -------- | ---------------------------------------- | 588| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 589| 14000011 | System inner fail. | 590| 14000016 | Operation Not Support. | 591 592**示例:** 593 594phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 595 596```ts 597async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) { 598 console.info('addResourceByArrayBufferDemo'); 599 try { 600 let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE; 601 let extension: string = 'jpg'; 602 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension); 603 let buffer: ArrayBuffer = new ArrayBuffer(2048); 604 assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, buffer); 605 await phAccessHelper.applyChanges(assetChangeRequest); 606 console.info('addResourceByArrayBuffer successfully'); 607 } catch (err) { 608 console.error(`addResourceByArrayBufferDemo failed with error: ${err.code}, ${err.message}`); 609 } 610} 611``` 612 613## saveCameraPhoto<sup>12+</sup> 614 615saveCameraPhoto(): void 616 617保存相机拍摄的照片。 618 619**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 620 621**错误码:** 622 623接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 624 625| 错误码ID | 错误信息 | 626| -------- | ---------------------------------------- | 627| 14000011 | System inner fail. | 628| 14000016 | Operation Not Support. | 629 630**示例:** 631 632phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 633 634```ts 635async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, asset: photoAccessHelper.PhotoAsset) { 636 console.info('saveCameraPhotoDemo'); 637 try { 638 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 639 assetChangeRequest.saveCameraPhoto(); 640 await phAccessHelper.applyChanges(assetChangeRequest); 641 console.info('apply saveCameraPhoto successfully'); 642 } catch (err) { 643 console.error(`apply saveCameraPhoto failed with error: ${err.code}, ${err.message}`); 644 } 645} 646``` 647 648## saveCameraPhoto<sup>13+</sup> 649 650saveCameraPhoto(imageFileType: ImageFileType): void 651 652保存相机拍摄的照片。 653 654**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 655 656**参数:** 657 658| 参数名 | 类型 | 必填 | 说明 | 659| -------- | ------------------------- | ---- | ---------- | 660| imageFileType | [ImageFileType](arkts-apis-photoAccessHelper-e.md#imagefiletype13) | 是 | 需要保存的类型。 | 661 662**错误码:** 663 664接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 665 666| 错误码ID | 错误信息 | 667| -------- | ---------------------------------------- | 668| 14000011 | System inner fail. | 669| 14000016 | Operation Not Support. | 670 671**示例:** 672 673phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 674 675```ts 676import { dataSharePredicates } from '@kit.ArkData'; 677import { image } from '@kit.ImageKit'; 678 679async function example(context: Context, asset: photoAccessHelper.PhotoAsset) { 680 console.info('saveCameraPhotoDemo'); 681 try { 682 let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 683 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 684 assetChangeRequest.saveCameraPhoto(photoAccessHelper.ImageFileType.JPEG); 685 await phAccessHelper.applyChanges(assetChangeRequest); 686 console.info('apply saveCameraPhoto successfully'); 687 } catch (err) { 688 console.error(`apply saveCameraPhoto failed with error: ${err.code}, ${err.message}`); 689 } 690} 691``` 692 693## discardCameraPhoto<sup>12+</sup> 694 695discardCameraPhoto(): void 696 697删除相机拍摄的照片。 698 699**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 700 701**错误码:** 702 703接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 704 705| 错误码ID | 错误信息 | 706| -------- | ---------------------------------------- | 707| 14000011 | Internal system error. | 708| 14000016 | Operation Not Support. | 709 710**示例:** 711 712phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 713 714```ts 715async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, asset: photoAccessHelper.PhotoAsset) { 716 console.info('discardCameraPhotoDemo'); 717 try { 718 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 719 assetChangeRequest.discardCameraPhoto(); 720 await phAccessHelper.applyChanges(assetChangeRequest); 721 console.info('apply discardCameraPhoto successfully'); 722 } catch (err) { 723 console.error(`apply discardCameraPhoto failed with error: ${err.code}, ${err.message}`); 724 } 725} 726``` 727 728## setOrientation<sup>15+</sup> 729 730setOrientation(orientation: number): void 731 732修改图片的旋转角度。 733 734**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core 735 736**参数:** 737 738| 参数名 | 类型 | 必填 | 说明 | 739| ---------- | ------- | ---- | ---------------------------------- | 740| orientation | number | 是 | 待修改的图片旋转角度,且只能为0、90、180、270。 | 741 742**错误码:** 743 744接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。 745 746| 错误码ID | 错误信息 | 747| -------- | ---------------------------------------- | 748| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. | 749| 14000011 | Internal system error. | 750 751**示例:** 752 753phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。 754 755```ts 756import { dataSharePredicates } from '@kit.ArkData'; 757import { BusinessError } from '@kit.BasicServicesKit'; 758 759async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) { 760 console.info('setOrientationDemo'); 761 let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); 762 let fetchOption: photoAccessHelper.FetchOptions = { 763 fetchColumns: [], 764 predicates: predicates 765 }; 766 let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption); 767 let asset = await fetchResult.getFirstObject(); 768 let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset); 769 assetChangeRequest.setOrientation(90); 770 phAccessHelper.applyChanges(assetChangeRequest).then(() => { 771 console.info('apply setOrientation successfully'); 772 }).catch((err: BusinessError) => { 773 console.error(`apply setOrientation failed with error: ${err.code}, ${err.message}`); 774 }); 775} 776``` 777