Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
e266a2fd
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e266a2fd
编写于
11月 18, 2022
作者:
O
openharmony_ci
提交者:
Gitee
11月 18, 2022
浏览文件
操作
浏览文件
下载
差异文件
!11384 增加launcherBundleManager模块
Merge pull request !11384 from longwei/master
上级
40bb8e28
0980b055
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
299 addition
and
29 deletion
+299
-29
zh-cn/application-dev/reference/apis/js-apis-Bundle-BundleStatusCallback.md
...dev/reference/apis/js-apis-Bundle-BundleStatusCallback.md
+6
-4
zh-cn/application-dev/reference/apis/js-apis-Bundle-InnerBundleManager.md
...n-dev/reference/apis/js-apis-Bundle-InnerBundleManager.md
+26
-25
zh-cn/application-dev/reference/apis/js-apis-launcherBundleManager.md
...ation-dev/reference/apis/js-apis-launcherBundleManager.md
+267
-0
未找到文件。
zh-cn/application-dev/reference/apis/js-apis-Bundle-BundleStatusCallback.md
浏览文件 @
e266a2fd
# BundleStatusCallback
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> 从API version 9开始不再支持。建议使用[bundleMonitor](js-apis-bundleMonitor.md)替代。
应用状态回调的信息,通过接口
[
innerBundleManager.on
](
js-apis-Bundle-InnerBundleManager.md
)
获取。
应用包回调的信息,通过接口
[
innerBundleManager.on
](
js-apis-Bundle-InnerBundleManager.md
)
获取。
## BundleStatusCallback<sup>(deprecated)<sup>
> 从API version 9开始不再
维护
。
> 从API version 9开始不再
支持。建议使用[bundleMonitor](js-apis-bundleMonitor.md)替代
。
**系统API:**
此接口为系统接口,三方应用不支持调用。
**系统能力:**
以下各项对应的系统能力均为SystemCapability.BundleManager.BundleFramework。
|
名称 | 类型
| 说明 |
|
监听类型 | 注册回调
| 说明 |
| ------ | --------------------------------------------- | -------------------------------------- |
| add | (bundleName : string, userId: number) => void | 获取应用安装时的信息。 |
| update | (bundleName : string, userId: number) => void | 获取应用更新时的信息。 |
...
...
zh-cn/application-dev/reference/apis/js-apis-Bundle-InnerBundleManager.md
浏览文件 @
e266a2fd
# innerBundleManager模块
(JS端SDK接口)
# innerBundleManager模块
<sup>(deprecated)</sup>
本模块提供
内部包的管理
本模块提供
launcher应用使用的接口
> **说明:**
>
> 本模块首批接口从API version 8 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> 本模块从API version 9开始不再支持。建议使用[launcherBundleManager](js-apis-launcherBundleManager.md)及[bundleMonitor](js-apis-bundleMonitor.md)替代。
## 导入模块
```
```
typescript
import
innerBundleManager
from
'
@ohos.bundle.innerBundleManager
'
;
```
...
...
@@ -16,20 +16,13 @@ import innerBundleManager from '@ohos.bundle.innerBundleManager';
SystemCapability.BundleManager.BundleFramework
## 权限列表
| 权限 | 权限等级 | 描述 |
| ------------------------------------------ | ------------ | ---------------------------- |
| ohos.permission.GET_BUNDLE_INFO_PRIVILEGED | system_basic | 可查询所有应用信息 |
| ohos.permission.LISTEN_BUNDLE_CHANGE | system_grant | 允许该应用获取应用变化消息。 |
权限等级参考
[
权限等级说明
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/accesstoken-overview.md#%E6%9D%83%E9%99%90%E7%AD%89%E7%BA%A7%E8%AF%B4%E6%98%8E
)
## innerBundleManager.getLauncherAbilityInfos
## innerBundleManager.getLauncherAbilityInfos<sup>(deprecated)</sup>
getLauncherAbilityInfos(bundleName: string, userId: number, callback: AsyncCallback
<
Array
<
LauncherAbilityInfo
>>
) : void;
以异步方法根据给定的包名获取LauncherAbilityInfos,使用callback形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getLauncherAbilityInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
@@ -52,12 +45,12 @@ SystemCapability.BundleManager.BundleFramework
| callback | AsyncCallback
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundle-LauncherAbilityInfo.md
)
>
> | 是 | 程序启动作为入参的回调函数,返回程序信息。 |
## innerBundleManager.getLauncherAbilityInfos
## innerBundleManager.getLauncherAbilityInfos<sup>(deprecated)</sup>
getLauncherAbilityInfos(bundleName: string, userId: number) : Promise
<
Array
<
LauncherAbilityInfo
>>
以异步方法根据给定的包名获取LauncherAbilityInfos,使用Promise形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getLauncherAbilityInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
@@ -84,11 +77,12 @@ SystemCapability.BundleManager.BundleFramework
| ------------------------------------------------------------ | ------------------------- |
| Promise
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundle-LauncherAbilityInfo.md
)
>
> | Promise形式返回程序信息。 |
## innerBundleManager.on
## innerBundleManager.on
<sup>(deprecated)</sup>
on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback, callback: AsyncCallback
<
string
>
) : void;
注册Callback。
> 从API version 9开始不再支持。建议使用[bundleMonitor#on](js-apis-bundleMonitor.md)替代。
**需要权限:**
...
...
@@ -110,11 +104,12 @@ SystemCapability.BundleManager.BundleFramework
| bundleStatusCallback |
[
BundleStatusCallback
](
js-apis-Bundle-BundleStatusCallback.md
)
| 是 | 指示要注册的回调。 |
| callback | AsyncCallback
\<
string> | 是 | 程序启动作为入参的回调函数,返回正确结果或错误信息。 |
## innerBundleManager.on
## innerBundleManager.on
<sup>(deprecated)</sup>
on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback): Promise
<
string
>
on(type:"BundleStatusChange", bundleStatusCallback : BundleStatusCallback)
: Promise
<
string
>
注册Callback。
> 从API version 9开始不再支持。建议使用[bundleMonitor#on](js-apis-bundleMonitor.md)替代。
**需要权限:**
...
...
@@ -141,11 +136,12 @@ SystemCapability.BundleManager.BundleFramework
| --------------- | ----------------------------------- |
| Promise
\<
string> | Promise形式返回正确结果或错误信息。 |
## innerBundleManager.off
## innerBundleManager.off
<sup>(deprecated)</sup>
off(type:"BundleStatusChange", callback: AsyncCallback
<
string
>
) : void;
取消注册Callback。
> 从API version 9开始不再支持。建议使用[bundleMonitor#off](js-apis-bundleMonitor.md)替代。
**需要权限:**
...
...
@@ -166,11 +162,12 @@ SystemCapability.BundleManager.BundleFramework
| type | string | 是 | 指示应执行命令,只支持BundleStatusChange。 |
| callback | AsyncCallback
\<
string> | 是 | 程序启动作为入参的回调函数,返回正确结果或错误信息。 |
## innerBundleManager.off
## innerBundleManager.off
<sup>(deprecated)</sup>
off(type:"BundleStatusChange"): Promise
<
string
>
off(type:"BundleStatusChange")
: Promise
<
string
>
取消注册Callback。
> 从API version 9开始不再支持。建议使用[bundleMonitor#off](js-apis-bundleMonitor.md)替代。
**需要权限:**
...
...
@@ -196,11 +193,12 @@ SystemCapability.BundleManager.BundleFramework
| --------------- | ----------------------------------- |
| Promise
\<
string> | Promise形式返回正确结果或错误信息。 |
## innerBundleManager.getAllLauncherAbilityInfos
## innerBundleManager.getAllLauncherAbilityInfos
<sup>(deprecated)</sup>
getAllLauncherAbilityInfos(userId: number, callback: AsyncCallback
<
Array
<
LauncherAbilityInfo
>>
) : void;
以异步方法获取所有的LauncherAbilityInfos,使用callback形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getAllLauncherAbilityInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
@@ -221,11 +219,12 @@ SystemCapability.BundleManager.BundleFramework
| userId | number | 是 | 用户ID。默认值:调用方所在用户,取值范围:大于等于0。 |
| callback | AsyncCallback
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundle-LauncherAbilityInfo.md
)
>
> | 是 | 程序启动作为入参的回调函数,返回程序信息。 |
## innerBundleManager.getAllLauncherAbilityInfos
## innerBundleManager.getAllLauncherAbilityInfos
<sup>(deprecated)</sup>
getAllLauncherAbilityInfos(userId: number) : Promise
<
Array
<
LauncherAbilityInfo
>>
以异步方法获取LauncherAbilityInfos,使用Promise形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getAllLauncherAbilityInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
@@ -251,11 +250,12 @@ SystemCapability.BundleManager.BundleFramework
| ------------------------------------------------------------ | ------------------------- |
| Promise
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundle-LauncherAbilityInfo.md
)
>
> | Promise形式返回程序信息。 |
## innerBundleManager.getShortcutInfos
## innerBundleManager.getShortcutInfos
<sup>(deprecated)</sup>
getShortcutInfos(bundleName :string, callback: AsyncCallback
<
Array
<
ShortcutInfo
>>
) : void;
以异步方法根据给定的包名获取快捷方式信息,使用callback形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getShortcutInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
@@ -276,11 +276,12 @@ SystemCapability.BundleManager.BundleFramework
| bundleName | string | 是 | 要查询的应用程序包名称。 |
| callback | AsyncCallback
\<
Array
<
[
ShortcutInfo
](
js-apis-bundle-ShortcutInfo.md
)
>
> | 是 | 程序启动作为入参的回调函数,返回快捷方式信息。 |
## innerBundleManager.getShortcutInfos
## innerBundleManager.getShortcutInfos
<sup>(deprecated)</sup>
getShortcutInfos(bundleName : string) : Promise
<
Array
<
ShortcutInfo
>>
以异步方法根据给定的包名获取快捷方式信息,使用Promise形式返回结果。
> 从API version 9开始不再支持。建议使用[launcherBundleManager#getShortcutInfo](js-apis-launcherBundleManager.md)替代。
**需要权限:**
...
...
zh-cn/application-dev/reference/apis/js-apis-launcherBundleManager.md
0 → 100644
浏览文件 @
e266a2fd
# Bundle.launcherBundleManager模块
本模块支持launcher应用所需的查询能力,支持
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
、
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
信息的查询。
> **说明:**
>
> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
```
## launcherBundlemanager.**getLauncherAbilityInfo<sup>9+</sup>**
getLauncherAbilityInfo(bundleName: string, userId: number, callback: AsyncCallback
<Array
\<[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
>) : void;
查询指定bundleName及用户的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
。
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
**参数:**
| 参数名 | 类型 | 必填 | 描述 |
| ---------- | ------ | ---- | -------------- |
| bundleName | string | 是 | 应用程序包名称。 |
| userId | number | 是 | 被查询的用户id。|
**返回值:**
| 类型 | 说明 |
| ----------------------------------- | --------------------------------------------------- |
| AsyncCallback
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
> | callback形式返回bundle包含的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
信息 |
**相关错误码**
| 错误码 | 错误信息(此处仅提供错误抛出的关键信息) |
| -------- | ---------------------------------------- |
| 17700001 | The specified bundle name is not found. |
| 17700004 | The specified user id is not found. |
**示例:**
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getLauncherAbilityInfo
(
'
com.example.demo
'
,
100
,
(
errData
,
data
)
=>
{
if
(
errData
!==
null
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
getLauncherAbilityInfo(bundleName: string, userId: number) : Promise
<Array
\<[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
>;
查询指定bundleName及用户的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
。
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
**参数:**
| 参数名 | 类型 | 必填 | 描述 |
| ---------- | ------ | ---- | -------------- |
| bundleName | string | 是 | 应用程序包名称 。|
| userId | number | 是 | 被查询的用户id。 |
**返回值:**
| 类型 | 说明 |
| ----------------------------- | -------------------------------------------------- |
| Promise
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
> | Promise形式返回bundle包含的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
信息 |
**相关错误码**
| 错误码 | 错误信息(此处仅提供错误抛出的关键信息) |
| -------- | ---------------------------------------- |
| 17700001 | The specified bundle name is not found. |
| 17700004 | The specified user id is not found. |
**示例:**
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getLauncherAbilityInfo
(
"
com.example.demo
"
,
100
).
then
(
data
=>
{
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
}).
catch
(
errData
=>
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
## launcherBundlemanager.getAllLauncherAbilityInfo<sup>9+</sup>
getAllLauncherAbilityInfo(userId: number, callback: AsyncCallback
<Array
\<[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
>) : void;
查询指定用户下所有应用的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
**参数:**
| 参数名 | 类型 | 必填 | 描述 |
| ------ | ------ | ---- | -------------- |
| userId | number | 是 | 被查询的用户id。 |
**返回值:**
| 类型 | 说明 |
| ----------------------------------- | ------------------------------------------------------- |
| AsyncCallback
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
> | callback形式返回指定用户下所有应用的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
|
**相关错误码**
| 错误码 | 错误信息(此处仅提供错误抛出的关键信息) |
| -------- | ---------------------------------------- |
| 17700004 | The specified user id is not found. |
示例:
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getAllLauncherAbilityInfo
(
100
,
(
errData
,
data
)
=>
{
if
(
errData
!==
null
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
getAllLauncherAbilityInfo(userId: number) : Promise
<Array
\<[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
>;
查询指定用户下所有应用的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
**参数:**
| 参数名 | 类型 | 必填 | 描述 |
| ------ | ------ | ---- | -------------- |
| userId | number | 是 | 被查询的用户id。 |
**返回值:**
| 类型 | 说明 |
| ----------------------------- | ------------------------------------------------------ |
| Promise
\<
Array
<
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
>
> | Promise形式返回指定用户下所有应用的
[
LauncherAbilityInfo
](
js-apis-bundleManager-launcherAbilityInfo.md
)
|
示例:
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getAllLauncherAbilityInfo
(
100
).
then
(
data
=>
{
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
}).
catch
(
errData
=>
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
## launcherBundlemanager.getShortcutInfo<sup>9+</sup>
getShortcutInfo(bundleName :string, callback: AsyncCallback
<Array
\<[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
>
>) : void;
查询当前用户下指定应用的
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
| 参数名 | 类型 | 必填 | 描述 |
| ---------- | ------ | ---- | -------------- |
| bundleName | string | 是 | 应用程序包名称。 |
**返回值:**
| 类型 | 说明 |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| AsyncCallback
\<
Array
<
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
>
> | callback形式返回当前用户下指定应用的
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
|
示例:
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getShortcutInfo
(
"
com.example.demo
"
,
(
errData
,
data
)
=>
{
if
(
errData
!==
null
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
getShortcutInfo(bundleName : string) : Promise
<Array
\<[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
>
>;
**需要权限:**
ohos.permission.GET_BUNDLE_INFO_PRIVILEGED
**系统接口:**
此接口为系统接口
**系统能力:**
SystemCapability.BundleManager.BundleFramework.Launcher
| 参数名 | 类型 | 必填 | 描述 |
| ---------- | ------ | ---- | -------------- |
| bundleName | string | 是 | 应用程序包名称。 |
**返回值:**
| 类型 | 说明 |
| ---------------------- | ----------------------------------------------- |
| Promise
\<
Array
<
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
>
> | Promise形式返回当前用户下指定应用的
[
ShortcutInfo
](
js-apis-bundleManager-shortcutInfo.md
)
|
示例:
```
typescript
import
launcherBundleManager
from
'
@ohos.bundle.launcherBundleManager
'
;
try
{
launcherBundleManager
.
getShortcutInfo
(
"
com.example.demo
"
).
then
(
data
=>
{
console
.
log
(
"
data is
"
+
JSON
.
Stringify
(
data
));
}).
catch
(
errData
=>
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
})
}
catch
(
errData
)
{
console
.
log
(
`errData is errCode:
${
errData
.
errCode
}
message:
${
errData
.
message
}
`
);
}
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录