1# 开发准备 2<!--Kit: Media Library Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @yixiaoff--> 5<!--Designer: @liweilu1--> 6<!--Tester: @xchaosioda--> 7<!--Adviser: @zengyawen--> 8 9应用需获取相册管理模块实例,才能访问和修改相册中的媒体数据。相册管理模块涉及用户个人数据信息,应用需向用户申请相册管理模块读写权限,以保证功能的正常运行。使用相册管理模块接口时,如无其他注明,默认在工程代码的pages/index.ets或其他自创的ets文件中使用。 10 11## 获取相册管理模块实例 12 13应用需要通过上下文Context和接口[getPhotoAccessHelper](../../reference/apis-media-library-kit/arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper),获取相册管理模块实例,用于访问和修改相册中的媒体数据信息,如图片和视频。 14 15**开发步骤** 16 171. 导入photoAccessHelper模块以使用相册管理模块相关接口。 182. 通过getUIContext().getHostContext()获取应用上下文。 193. 获取相册管理模块实例。 20 21```ts 22import { photoAccessHelper } from '@kit.MediaLibraryKit'; 23import { common } from '@kit.AbilityKit'; 24 25// 此处获取的photoAccessHelper实例为全局对象,后续文档中使用到的地方默认为使用此处获取的对象,如未添加此段代码报未定义的错误请自行添加。 26// 请在组件内获取context,确保this.getUiContext().getHostContext()返回结果为UIAbilityContext 27@Entry 28@Component 29struct Index { 30 @State outputText: string = '支持的类型为:\n'; 31 32 build() { 33 Row() { 34 Button("example").onClick(async () => { 35 let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; 36 let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); 37 }).width('100%') 38 } 39 .height('90%') 40 } 41} 42``` 43 44## 申请相册管理模块功能相关权限 45 46相册管理模块的读写操作需要相应权限,在申请权限前,请保证符合[权限使用的基本原则](../../security/AccessToken/app-permission-mgmt-overview.md#权限使用的基本原则)。涉及的权限如下表。 47 48| 权限名 | 说明 | 授权方式 | 49| ------------------------------ | ------------------------------------------ | ---------- | 50| ohos.permission.READ_IMAGEVIDEO | 允许应用读取媒体库的图片和视频媒体文件信息。 | user_grant | 51| ohos.permission.WRITE_IMAGEVIDEO | 允许应用读写媒体库的图片和视频媒体文件信息。 | user_grant | 52 53以上权限的授权方式均为user_grant(用户授权),即开发者在module.json5文件中配置对应的权限后,需要使用接口[abilityAccessCtrl.requestPermissionsFromUser](../../reference/apis-ability-kit/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)去校验当前用户是否已授权。如果已授权,应用可以直接访问和修改目标对象;否则需要弹框向用户申请授权。 54 55**开发步骤** 56<!--RP1--> 571. 上述权限均为受控权限,申请前需要额外申请ACL白名单,请参考[声明ACL权限](../../security/AccessToken/declare-permissions-in-acl.md)。 58<!--RP1End--> 592. [在配置文件module.json5中声明权限](../../security/AccessToken/declare-permissions.md)。 603. [向用户申请授权](../../security/AccessToken/request-user-authorization.md)。 61 62> **说明:** 63> 64> 即使用户曾经授予权限,应用在调用受此权限保护的接口前,也应该先检查是否有权限。不能把之前授予的状态持久化,因为用户在动态授予后还可以通过“设置”取消应用的权限。 65