• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 媒体库开发概述
2
3MediaLibrary提供媒体库相关能力,帮助开发者更方便地访问和修改媒体文件,具体分为:
4
5- [媒体资源(音频、视频、图片文件等)相关](medialibrary-resource-guidelines.md),包括:
6  - 查询指定媒体资源
7  - 获取图片/视频
8  - 获取图片/视频缩略图
9  - 创建媒体资源
10  - 重命名媒体资源
11  - 将媒体资源放入回收站
12- [文件路径相关](medialibrary-filepath-guidelines.md),包括:
13  - 获取文件保存的公共目录
14  - 沙箱与公共路径间文件的复制
15  - 读写文件内容
16- [相册相关](medialibrary-album-guidelines.md),包括:
17  - 获取相册中的图片/视频
18  - 创建相册
19  - 重命名相册
20
21> **说明:**<br/>
22> 本开发指导基于API Version 9,仅适用于Stage模型。
23
24应用需要先获取媒体库实例,才能访问和修改用户等个人媒体数据信息。媒体库涉及用户个人数据信息,所以应用需要向用户申请媒体库读写操作权限才能保证功能的正常运行。在使用媒体库相关接口时如无其他注明则默认在工程代码的pages/index.ets或者其他自创的ets文件中使用
25
26开发者在使用MediaLibrary进行功能开发前,请先掌握以下内容:
27
28- [获取媒体库实例](#获取媒体库实例)
29- [申请媒体库功能相关权限](#申请媒体库功能相关权限)
30
31## 获取媒体库实例
32
33应用需要使用应用上下文Context通过接口[getMediaLibrary](../reference/apis/js-apis-medialibrary.md#medialibrarygetmedialibrary8),获取媒体库实例,用于访问和修改用户等个人媒体数据信息(如音频、视频、图片、文档等)。
34
35**开发步骤**
36
371. 导入mediaLibrary模块以使用媒体库相关接口。
382. 通过getContext获取应用上下文。
393. 获取媒体库实例。
40
41```ts
42import mediaLibrary from '@ohos.multimedia.mediaLibrary';
43
44const context = getContext(this);
45let media = mediaLibrary.getMediaLibrary(context);
46```
47
48## 申请媒体库功能相关权限
49
50媒体库的读写操作需要相应权限,在申请权限前,请保证符合[权限使用的基本原则](../security/accesstoken-overview.md#权限使用的基本原则)。涉及的权限如下表。
51
52| 权限名                         | 说明                                       | 授权方式   |
53| ------------------------------ | ------------------------------------------ | ---------- |
54| ohos.permission.READ_MEDIA     | 允许应用读取用户外部存储中的媒体文件信息。 | user_grant |
55| ohos.permission.WRITE_MEDIA    | 允许应用读写用户外部存储中的媒体文件信息。 | user_grant |
56| ohos.permission.MEDIA_LOCATION | 允许应用访问用户媒体文件中的地理位置信息。 | user_grant |
57
58以上权限的授权方式均为user_grant(用户授权),即开发者在module.json5文件中配置对应的权限后,需要使用接口[abilityAccessCtrl.requestPermissionsFromUser](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)去校验当前用户是否已授权。如果是,应用可以直接访问/操作目标对象;否则需要弹框向用户申请授权。
59
60> **说明:**<br/>即使用户曾经授予权限,应用在调用受此权限保护的接口前,也应该先检查是否有权限。不能把之前授予的状态持久化,因为用户在动态授予后还可以通过“设置”取消应用的权限。
61
62**开发步骤**
63
641. 在配置文件module.json5中声明权限。在配置文件的“module”标签内,增加“requestPermissions”标签,标签内容请根据实际情况填写。标签说明可参考[访问控制(权限)开发指导](../security/accesstoken-guidelines.md)。
65
66```json
67{
68  "module": {
69    "requestPermissions": [
70      {
71        "name": "ohos.permission.MEDIA_LOCATION",
72        "reason": "$string:reason",
73        "usedScene": {
74          "abilities": [
75            "EntryAbility"
76          ],
77          "when": "always"
78        }
79      },
80      {
81        "name": "ohos.permission.READ_MEDIA",
82        "reason": "$string:reason",
83        "usedScene": {
84          "abilities": [
85            "EntryAbility"
86          ],
87          "when": "always"
88        }
89      },
90      {
91        "name": "ohos.permission.WRITE_MEDIA",
92        "reason": "$string:reason",
93        "usedScene": {
94          "abilities": [
95            "EntryAbility"
96          ],
97          "when": "always"
98        }
99      }
100    ]
101  }
102}
103```
104
1052. 在Ability.ts中onWindowStageCreate里调用requestPermissionsFromUser进行权限校验,可以选择需要动态申请获取的权限自行添加相应代码
106
107```ts
108import UIAbility from '@ohos.app.ability.UIAbility';
109import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl';
110
111export default class EntryAbility extends UIAbility {
112  onWindowStageCreate(windowStage) {
113    let list : Array<Permissions> = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA'];
114    let permissionRequestResult;
115    let atManager = abilityAccessCtrl.createAtManager();
116    atManager.requestPermissionsFromUser(this.context, list, (err, result) => {
117      if (err) {
118        console.error('requestPermissionsFromUserError: ' + JSON.stringify(err));
119      } else {
120        permissionRequestResult = result;
121        console.info('permissionRequestResult: ' + JSON.stringify(permissionRequestResult));
122      }
123    });
124  }
125}
126```
127
128