提交 9783f81b 编写于 作者: S sunbees 提交者: Gitee

Merge branch 'master' of gitee.com:openharmony/docs into arktsCard4

Signed-off-by: Nsunbees <sunqinjia@huawei.com>
...@@ -435,6 +435,7 @@ zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md @cheng_guohong ...@@ -435,6 +435,7 @@ zh-cn/application-dev/reference/apis/js-apis-system-bluetooth.md @cheng_guohong
zh-cn/application-dev/reference/apis/js-apis-system-brightness.md @aqxyjay @zengyawen @aqxyjay @alien0208 zh-cn/application-dev/reference/apis/js-apis-system-brightness.md @aqxyjay @zengyawen @aqxyjay @alien0208
zh-cn/application-dev/reference/apis/js-apis-system-cipher.md @gaoyong @zengyawen @niejiteng @jumozhanjiang zh-cn/application-dev/reference/apis/js-apis-system-cipher.md @gaoyong @zengyawen @niejiteng @jumozhanjiang
zh-cn/application-dev/reference/apis/js-apis-system-configuration.md @Buda-Liu @ningningW @budda-wang @tomatodevboy zh-cn/application-dev/reference/apis/js-apis-system-configuration.md @Buda-Liu @ningningW @budda-wang @tomatodevboy
zh-cn/application-dev/reference/apis/js-apis-system-date-time.md @feng-aiwen @ningningW @illybyy @murphy1984
zh-cn/application-dev/reference/apis/js-apis-system-device.md @mupceet @zengyawen @handyohos @nan-xiansen zh-cn/application-dev/reference/apis/js-apis-system-device.md @mupceet @zengyawen @handyohos @nan-xiansen
zh-cn/application-dev/reference/apis/js-apis-system-fetch.md @zhang-hai-feng @zengyawen @jyh926 @gaoxi785 zh-cn/application-dev/reference/apis/js-apis-system-fetch.md @zhang-hai-feng @zengyawen @jyh926 @gaoxi785
zh-cn/application-dev/reference/apis/js-apis-system-file.md @panqinxu @zengyawen @bubble_mao @jinhaihw zh-cn/application-dev/reference/apis/js-apis-system-file.md @panqinxu @zengyawen @bubble_mao @jinhaihw
...@@ -520,7 +521,7 @@ zh-cn/application-dev/reference/apis/js-apis-bundleManager.md @shuaytao @RayShih ...@@ -520,7 +521,7 @@ zh-cn/application-dev/reference/apis/js-apis-bundleManager.md @shuaytao @RayShih
zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md @shuaytao @RayShih @wangzhen107 @inter515 zh-cn/application-dev/reference/apis/js-apis-bundleMonitor.md @shuaytao @RayShih @wangzhen107 @inter515
zh-cn/application-dev/reference/apis/js-apis-colorSpaceManager.md @zhangqiang183 @ge-yafang @wind_zj @zxg-gitee zh-cn/application-dev/reference/apis/js-apis-colorSpaceManager.md @zhangqiang183 @ge-yafang @wind_zj @zxg-gitee
zh-cn/application-dev/reference/apis/js-apis-commonEventManager.md @jayleehw @RayShih @li-weifeng2 @currydavids zh-cn/application-dev/reference/apis/js-apis-commonEventManager.md @jayleehw @RayShih @li-weifeng2 @currydavids
zh-cn/application-dev/reference/apis/js-apis-configPolicy.md @Buda-Liu @ningningW @budda-wang @yangqing3 zh-cn/application-dev/reference/apis/js-apis-configPolicy.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-cooperate.md @yuanxinying @ningningW @cococoler @alien0208 zh-cn/application-dev/reference/apis/js-apis-cooperate.md @yuanxinying @ningningW @cococoler @alien0208
zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md @gaoyong @zengyawen @niejiteng @jumozhanjiang zh-cn/application-dev/reference/apis/js-apis-cryptoFramework.md @gaoyong @zengyawen @niejiteng @jumozhanjiang
zh-cn/application-dev/reference/apis/js-apis-cert.md @gaoyong @zengyawen @niejiteng @jumozhanjiang zh-cn/application-dev/reference/apis/js-apis-cert.md @gaoyong @zengyawen @niejiteng @jumozhanjiang
...@@ -528,8 +529,13 @@ zh-cn/application-dev/reference/apis/js-apis-curve.md @huaweimaxuchu @HelloCreas ...@@ -528,8 +529,13 @@ zh-cn/application-dev/reference/apis/js-apis-curve.md @huaweimaxuchu @HelloCreas
zh-cn/application-dev/reference/apis/js-apis-defaultAppManager.md @shuaytao @RayShih @wangzhen107 @inter515 zh-cn/application-dev/reference/apis/js-apis-defaultAppManager.md @shuaytao @RayShih @wangzhen107 @inter515
zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md @shuaytao @RayShih @wangzhen107 @inter515 zh-cn/application-dev/reference/apis/js-apis-distributedBundle.md @shuaytao @RayShih @wangzhen107 @inter515
zh-cn/application-dev/reference/apis/js-apis-distributedKVStore.md @feng-aiwen @ge-yafang @gong-a-shi @logic42 zh-cn/application-dev/reference/apis/js-apis-distributedKVStore.md @feng-aiwen @ge-yafang @gong-a-shi @logic42
zh-cn/application-dev/reference/apis/js-apis-enterprise-adminManager.md @Buda-Liu @ningningW @budda-wang @yangqing3 zh-cn/application-dev/reference/apis/js-apis-enterprise-accountManager.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-dateTimeManager.md @Buda-Liu @ningningW @budda-wang @yangqing3 zh-cn/application-dev/reference/apis/js-apis-enterprise-adminManager.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-dateTimeManager.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-deviceControl.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-deviceInfo.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-networkManager.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-enterprise-wifiManager.md @liuzuming @ningningW @yangqing3
zh-cn/application-dev/reference/apis/js-apis-fileAccess.md @panqinxu @zengyawen @bubble_mao @jinhaihw zh-cn/application-dev/reference/apis/js-apis-fileAccess.md @panqinxu @zengyawen @bubble_mao @jinhaihw
zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md @panqinxu @zengyawen @bubble_mao @jinhaihw zh-cn/application-dev/reference/apis/js-apis-fileExtensionInfo.md @panqinxu @zengyawen @bubble_mao @jinhaihw
zh-cn/application-dev/reference/apis/js-apis-freeInstall.md @shuaytao @RayShih @wangzhen107 @inter515 zh-cn/application-dev/reference/apis/js-apis-freeInstall.md @shuaytao @RayShih @wangzhen107 @inter515
......
...@@ -136,7 +136,7 @@ async function copySandbox2Public() { ...@@ -136,7 +136,7 @@ async function copySandbox2Public() {
console.error('file asset get failed, message = ' + err); console.error('file asset get failed, message = ' + err);
} }
let fdPub = await fileAsset.open('rw'); let fdPub = await fileAsset.open('rw');
let fdSand = await fs.open(sandboxDirPath + 'testFile.txt', OpenMode.READ_WRITE); let fdSand = await fs.open(sandboxDirPath + 'testFile.txt', fs.OpenMode.READ_WRITE);
await fs.copyFile(fdSand.fd, fdPub); await fs.copyFile(fdSand.fd, fdPub);
await fileAsset.close(fdPub); await fileAsset.close(fdPub);
await fs.close(fdSand.fd); await fs.close(fdSand.fd);
...@@ -174,7 +174,7 @@ async function example() { ...@@ -174,7 +174,7 @@ async function example() {
const context = getContext(this); const context = getContext(this);
let media = mediaLibrary.getMediaLibrary(context); let media = mediaLibrary.getMediaLibrary(context);
const path = await media.getPublicDirectory(DIR_DOCUMENTS); const path = await media.getPublicDirectory(DIR_DOCUMENTS);
media.createAsset(mediaType, "testFile.text", path).then((asset) => { media.createAsset(mediaType, "testFile.txt", path).then((asset) => {
console.info("createAsset successfully:" + JSON.stringify(asset)); console.info("createAsset successfully:" + JSON.stringify(asset));
}).catch((err) => { }).catch((err) => {
console.error("createAsset failed with error: " + err); console.error("createAsset failed with error: " + err);
......
...@@ -42,14 +42,11 @@ async function example() { ...@@ -42,14 +42,11 @@ async function example() {
const context = getContext(this); const context = getContext(this);
let media = mediaLibrary.getMediaLibrary(context); let media = mediaLibrary.getMediaLibrary(context);
const fetchFileResult = await media.getFileAssets(option); const fetchFileResult = await media.getFileAssets(option);
fetchFileResult.getFirstObject().then((fileAsset) => { fetchFileResult.getFirstObject().then(async (fileAsset) => {
console.log('getFirstObject.displayName : ' + fileAsset.displayName); console.log('getFirstObject.displayName : ' + fileAsset.displayName);
for (let i = 1; i < fetchFileResult.getCount(); i++) { for (let i = 1; i < fetchFileResult.getCount(); i++) {
fetchFileResult.getNextObject().then((fileAsset) => { let fileAsset = await fetchFileResult.getNextObject();
console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName); console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
}).catch((err) => {
console.error('Failed to get next object: ' + err);
});
} }
}).catch((err) => { }).catch((err) => {
console.error('Failed to get first object: ' + err); console.error('Failed to get first object: ' + err);
...@@ -75,14 +72,11 @@ async function example() { ...@@ -75,14 +72,11 @@ async function example() {
const context = getContext(this); const context = getContext(this);
let media = mediaLibrary.getMediaLibrary(context); let media = mediaLibrary.getMediaLibrary(context);
const fetchFileResult = await media.getFileAssets(option); const fetchFileResult = await media.getFileAssets(option);
fetchFileResult.getFirstObject().then((fileAsset) => { fetchFileResult.getFirstObject().then(async (fileAsset) => {
console.info('getFirstObject.displayName : ' + fileAsset.displayName); console.info('getFirstObject.displayName : ' + fileAsset.displayName);
for (let i = 1; i < fetchFileResult.getCount(); i++) { for (let i = 1; i < fetchFileResult.getCount(); i++) {
fetchFileResult.getNextObject().then((fileAsset) => { let fileAsset = await fetchFileResult.getNextObject();
console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName); console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
}).catch((err) => {
console.error('Failed to get next object: ' + err);
});
} }
}).catch((err) => { }).catch((err) => {
console.error('Failed to get first object: ' + err); console.error('Failed to get first object: ' + err);
...@@ -108,14 +102,11 @@ async function example() { ...@@ -108,14 +102,11 @@ async function example() {
const context = getContext(this); const context = getContext(this);
let media = mediaLibrary.getMediaLibrary(context); let media = mediaLibrary.getMediaLibrary(context);
const fetchFileResult = await media.getFileAssets(option); const fetchFileResult = await media.getFileAssets(option);
fetchFileResult.getFirstObject().then((fileAsset) => { fetchFileResult.getFirstObject().then(async (fileAsset) => {
console.info('getFirstObject.displayName : ' + fileAsset.displayName); console.info('getFirstObject.displayName : ' + fileAsset.displayName);
for (let i = 1; i < fetchFileResult.getCount(); i++) { for (let i = 1; i < fetchFileResult.getCount(); i++) {
fetchFileResult.getNextObject().then((fileAsset) => { let fileAsset = await fetchFileResult.getNextObject();
console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName); console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
}).catch((err) => {
console.error('Failed to get next object: ' + err);
});
} }
}).catch((err) => { }).catch((err) => {
console.error('Failed to get first object: ' + err); console.error('Failed to get first object: ' + err);
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
- 应用程序包结构 - 应用程序包结构
- [Stage模型应用程序包结构](quick-start/application-package-structure-stage.md) - [Stage模型应用程序包结构](quick-start/application-package-structure-stage.md)
- [FA模型应用程序包结构](quick-start/application-package-structure-fa.md) - [FA模型应用程序包结构](quick-start/application-package-structure-fa.md)
- [HAR包结构](quick-start/har-structure.md)
- 应用程序包多HAP机制 - 应用程序包多HAP机制
- [多HAP机制设计目标](quick-start/multi-hap-objective.md) - [多HAP机制设计目标](quick-start/multi-hap-objective.md)
- [多HAP构建视图](quick-start/multi-hap-build-view.md) - [多HAP构建视图](quick-start/multi-hap-build-view.md)
...@@ -26,11 +25,11 @@ ...@@ -26,11 +25,11 @@
- [多HAP运行机制及数据通信方式](quick-start/multi-hap-principles.md) - [多HAP运行机制及数据通信方式](quick-start/multi-hap-principles.md)
- [应用程序包安装和卸载流程](quick-start/application-package-install-uninstall.md) - [应用程序包安装和卸载流程](quick-start/application-package-install-uninstall.md)
- 共享包 - 共享包
- [共享包概述](quick-start/shared-guide.md)
- [HAR](quick-start/har-package.md) - [HAR](quick-start/har-package.md)
- HSP - HSP
- [HSP概述](quick-start/hsp-guide.md)
- [应用内HSP开发指导](quick-start/in-app-hsp.md) - [应用内HSP开发指导](quick-start/in-app-hsp.md)
- [应用间HSP开发指导](quick-start/cross-app-hsp.md) - [应用间HSP开发指导(仅对系统应用开放)](quick-start/cross-app-hsp.md)
- 应用配置文件(Stage模型) - 应用配置文件(Stage模型)
- [应用配置文件概述(Stage模型)](quick-start/application-configuration-file-overview-stage.md) - [应用配置文件概述(Stage模型)](quick-start/application-configuration-file-overview-stage.md)
- [app.json5配置文件](quick-start/app-configuration-file.md) - [app.json5配置文件](quick-start/app-configuration-file.md)
......
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
- [应用测试](application-test/Readme-CN.md) - [应用测试](application-test/Readme-CN.md)
- [IDL工具规格及使用说明书](IDL/idl-guidelines.md) - [IDL工具规格及使用说明书](IDL/idl-guidelines.md)
- [Native API的相关指导](napi/Readme-CN.md) - [Native API的相关指导](napi/Readme-CN.md)
- [文件管理](file-management/medialibrary-overview.md)
- [一次开发,多端部署](key-features/multi-device-app-dev/foreword.md)
### 工具 ### 工具
......
...@@ -40,6 +40,8 @@ ...@@ -40,6 +40,8 @@
- [应用测试](application-test/arkxtest-guidelines.md) - [应用测试](application-test/arkxtest-guidelines.md)
- [IDL工具规格及使用说明书](IDL/idl-guidelines.md) - [IDL工具规格及使用说明书](IDL/idl-guidelines.md)
- [Native API的相关指导](napi/napi-guidelines.md) - [Native API的相关指导](napi/napi-guidelines.md)
- [文件管理](file-management/medialibrary-overview.md)
- [一次开发,多端部署](key-features/multi-device-app-dev/foreword.md)
### 工具 ### 工具
......
...@@ -2,18 +2,16 @@ ...@@ -2,18 +2,16 @@
## EnterpriseAdminExtensionAbility简介 ## EnterpriseAdminExtensionAbility简介
企业设备管理扩展能力,是MDM应用必备组件。当开发者为企业开发MDM(Mobilie Device Management)应用时,需继承EnterpriseAdminExtensionAbility,在EnterpriseAdminExtensionAbility实例中实现MDM业务逻辑,EnterpriseAdminExtensionAbility实现了系统管理状态变化通知功能,并定义了管理应用激活、去激活、应用安装、卸载事件等回调接口。 企业设备管理扩展能力,是MDM(Mobile Device Management)应用必备组件。当开发者为企业开发MDM应用时,需继承EnterpriseAdminExtensionAbility,在EnterpriseAdminExtensionAbility实例中实现MDM业务逻辑,EnterpriseAdminExtensionAbility实现了系统管理状态变化通知功能,并定义了管理应用激活、去激活、应用安装、卸载事件等回调接口。
## 约束与限制 ## 约束与限制
- **_功能限制_** 仅支持设备管理员应用使用。(功能限制)
仅支持设备管理员应用使用。
## 场景:监听设备管理器激活、去激活、应用安装、卸载事件
## 场景:监听设备管理器激活、去激活、应用安装、卸载事件 ### 概述
## 概述
onAdminEnabled:由企业管理员或者员工部署MDM应用,激活设备管理器,系统通知MDM应用已激活DeviceAdmin权限。MDM应用可在onAdminEnabled回调函数中进行初始化策略设置。 onAdminEnabled:由企业管理员或者员工部署MDM应用,激活设备管理器,系统通知MDM应用已激活DeviceAdmin权限。MDM应用可在onAdminEnabled回调函数中进行初始化策略设置。
...@@ -23,7 +21,7 @@ onBundleAdded: 企业应用管理场景下,企业管理员订阅应用安装 ...@@ -23,7 +21,7 @@ onBundleAdded: 企业应用管理场景下,企业管理员订阅应用安装
onBundleRemoved: 企业应用管理场景下,企业管理员取消订阅应用安装卸载事件。 onBundleRemoved: 企业应用管理场景下,企业管理员取消订阅应用安装卸载事件。
## 接口说明 ### 接口说明
| 类名 | 接口名称 | 描述 | | 类名 | 接口名称 | 描述 |
| :------------------------------ | ----------------------------------------- | ---------------------------- | | :------------------------------ | ----------------------------------------- | ---------------------------- |
...@@ -32,13 +30,13 @@ onBundleRemoved: 企业应用管理场景下,企业管理员取消订阅应用 ...@@ -32,13 +30,13 @@ onBundleRemoved: 企业应用管理场景下,企业管理员取消订阅应用
| EnterpriseAdminExtensionAbility | onAdminEnabled(): void | 设备管理器应用激活回调方法 | | EnterpriseAdminExtensionAbility | onAdminEnabled(): void | 设备管理器应用激活回调方法 |
| EnterpriseAdminExtensionAbility | onBundleRemoved(bundleName: string): void | 应用卸载回调方法 | | EnterpriseAdminExtensionAbility | onBundleRemoved(bundleName: string): void | 应用卸载回调方法 |
## 开发步骤 ### 开发步骤
开发者在实现EnterpriseAdminExtensionAbility的时候,需先激活设备管理员应用,并在设备管理员应用的代码目录下新建ExtensionAbility,具体步骤如下。 开发者在实现EnterpriseAdminExtensionAbility的时候,需先激活设备管理员应用,并在设备管理员应用的代码目录下新建ExtensionAbility,具体步骤如下。
1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为EnterpriseExtAbility。 1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为EnterpriseExtAbility。
2. 在EnterpriseExtAbility目录,右键选择“New > TypeScript File”,新建一个TypeScript文件并命名为EnterpriseExtAbility.ts。 2. 在EnterpriseExtAbility目录,右键选择“New > TypeScript File”,新建一个TypeScript文件并命名为EnterpriseExtAbility.ts。
3. 打开EnterpriseExtAbility.ts文件,导入EnterpriseAdminExtensionAbility模块,自定义类继承EnterpriseAdminExtensionAbility并加上需要的应用通知回调方法,如onAdminEnabled()、onAdminDisabled()等回调方法。当设备管理员应用被激活或去激活时,则可以在对应回调方法中接受系统发送通知。 3. 打开EnterpriseExtAbility.ts文件,导入EnterpriseAdminExtensionAbility模块,自定义类继承EnterpriseAdminExtensionAbility并加上需要的应用通知回调方法,如onAdminEnabled()、onAdminDisabled()等回调方法。当设备管理员应用被激活或去激活时,则可以在对应回调方法中接受系统发送通知。
```ts ```ts
import EnterpriseAdminExtensionAbility from '@ohos.enterprise.EnterpriseAdminExtensionAbility'; import EnterpriseAdminExtensionAbility from '@ohos.enterprise.EnterpriseAdminExtensionAbility';
......
...@@ -30,7 +30,7 @@ HTTP数据请求功能主要由http模块提供。 ...@@ -30,7 +30,7 @@ HTTP数据请求功能主要由http模块提供。
| on\('dataProgress'\)<sup>10+</sup> | 订阅HTTP流式响应数据接收进度事件。 | | on\('dataProgress'\)<sup>10+</sup> | 订阅HTTP流式响应数据接收进度事件。 |
| off\('dataProgress'\)<sup>10+</sup> | 取消订阅HTTP流式响应数据接收进度事件。 | | off\('dataProgress'\)<sup>10+</sup> | 取消订阅HTTP流式响应数据接收进度事件。 |
## 开发步骤 ## request接口开发步骤
1. 从@ohos.net.http.d.ts中导入http命名空间。 1. 从@ohos.net.http.d.ts中导入http命名空间。
2. 调用createHttp()方法,创建一个HttpRequest对象。 2. 调用createHttp()方法,创建一个HttpRequest对象。
...@@ -83,7 +83,7 @@ httpRequest.request( ...@@ -83,7 +83,7 @@ httpRequest.request(
console.info('error:' + JSON.stringify(err)); console.info('error:' + JSON.stringify(err));
// 取消订阅HTTP响应头事件 // 取消订阅HTTP响应头事件
httpRequest.off('headersReceive'); httpRequest.off('headersReceive');
// 当该请求使用完毕时,调用destroy方法主动销毁 // 当该请求使用完毕时,调用destroy方法主动销毁
httpRequest.destroy(); httpRequest.destroy();
} }
} }
......
...@@ -49,6 +49,7 @@ TLS Socket连接主要由tls_socket模块提供。具体接口说明如下表。 ...@@ -49,6 +49,7 @@ TLS Socket连接主要由tls_socket模块提供。具体接口说明如下表。
| 接口名 | 功能描述 | | 接口名 | 功能描述 |
| -------- | -------- | | -------- | -------- |
| constructTLSSocketInstance() | 创建一个TLSSocket对象。 |
| bind() | 绑定IP地址和端口号。 | | bind() | 绑定IP地址和端口号。 |
| close(type:&nbsp;'error') | 关闭连接。 | | close(type:&nbsp;'error') | 关闭连接。 |
| connect() | 连接到指定的IP地址和端口。 | | connect() | 连接到指定的IP地址和端口。 |
......
...@@ -27,13 +27,22 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -27,13 +27,22 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
详细API含义可参考:[音频管理API文档AudioCapturer](../reference/apis/js-apis-audio.md#audiocapturer8) 详细API含义可参考:[音频管理API文档AudioCapturer](../reference/apis/js-apis-audio.md#audiocapturer8)
1. 使用createAudioCapturer()创建一个AudioCapturer实例。 1. 使用createAudioCapturer()创建一个全局的AudioCapturer实例。
在audioCapturerOptions中设置音频采集器的相关参数。该实例可用于音频采集、控制和获取采集状态,以及注册通知回调。 在audioCapturerOptions中设置音频采集器的相关参数。该实例可用于音频采集、控制和获取采集状态,以及注册通知回调。
```js ```js
import audio from '@ohos.multimedia.audio'; import audio from '@ohos.multimedia.audio';
import fs from '@ohos.file.fs'; //便于步骤3 read函数调用
//音频渲染相关接口自测试
@Entry
@Component
struct AudioRenderer {
@State message: string = 'Hello World'
private audioCapturer : audio.AudioCapturer; //供全局调用
async initAudioCapturer(){
let audioStreamInfo = { let audioStreamInfo = {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
channels: audio.AudioChannel.CHANNEL_1, channels: audio.AudioChannel.CHANNEL_1,
...@@ -51,8 +60,9 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -51,8 +60,9 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
capturerInfo: audioCapturerInfo capturerInfo: audioCapturerInfo
} }
let audioCapturer = await audio.createAudioCapturer(audioCapturerOptions); this.audioCapturer = await audio.createAudioCapturer(audioCapturerOptions);
console.log('AudioRecLog: Create audio capturer success.'); console.log('AudioRecLog: Create audio capturer success.');
}
``` ```
2. 调用start()方法来启动/恢复采集任务。 2. 调用start()方法来启动/恢复采集任务。
...@@ -60,25 +70,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -60,25 +70,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
启动完成后,采集器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。 启动完成后,采集器状态将变更为STATE_RUNNING,然后应用可以开始读取缓冲区。
```js ```js
import audio from '@ohos.multimedia.audio'; async startCapturer() {
let state = this.audioCapturer.state;
async function startCapturer() {
let state = audioCapturer.state;
// Capturer start时的状态应该是STATE_PREPARED、STATE_PAUSED和STATE_STOPPED之一. // Capturer start时的状态应该是STATE_PREPARED、STATE_PAUSED和STATE_STOPPED之一.
if (state != audio.AudioState.STATE_PREPARED || state != audio.AudioState.STATE_PAUSED || if (state == audio.AudioState.STATE_PREPARED || state == audio.AudioState.STATE_PAUSED ||
state != audio.AudioState.STATE_STOPPED) { state == audio.AudioState.STATE_STOPPED) {
console.info('Capturer is not in a correct state to start'); await this.audioCapturer.start();
return; state = this.audioCapturer.state;
}
await audioCapturer.start();
state = audioCapturer.state;
if (state == audio.AudioState.STATE_RUNNING) { if (state == audio.AudioState.STATE_RUNNING) {
console.info('AudioRecLog: Capturer started'); console.info('AudioRecLog: Capturer started');
} else { } else {
console.error('AudioRecLog: Capturer start failed'); console.error('AudioRecLog: Capturer start failed');
} }
} }
}
``` ```
3. 读取采集器的音频数据并将其转换为字节流。重复调用read()方法读取数据,直到应用准备停止采集。 3. 读取采集器的音频数据并将其转换为字节流。重复调用read()方法读取数据,直到应用准备停止采集。
...@@ -86,17 +91,15 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -86,17 +91,15 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
参考以下示例,将采集到的数据写入文件。 参考以下示例,将采集到的数据写入文件。
```js ```js
import fs from '@ohos.file.fs'; async readData(){
let state = this.audioCapturer.state;
let state = audioCapturer.state;
// 只有状态为STATE_RUNNING的时候才可以read. // 只有状态为STATE_RUNNING的时候才可以read.
if (state != audio.AudioState.STATE_RUNNING) { if (state != audio.AudioState.STATE_RUNNING) {
console.info('Capturer is not in a correct state to read'); console.info('Capturer is not in a correct state to read');
return; return;
} }
const path = '/data/data/.pulse_dir/capture_js.wav'; // 采集到的音频文件存储路径 const path = '/data/data/.pulse_dir/capture_js.wav'; // 采集到的音频文件存储路径
let file = fs.openSync(filePath, 0o2); let file = fs.openSync(path, 0o2);
let fd = file.fd; let fd = file.fd;
if (file !== null) { if (file !== null) {
console.info('AudioRecLog: file created'); console.info('AudioRecLog: file created');
...@@ -104,16 +107,14 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -104,16 +107,14 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
console.info('AudioRecLog: file create : FAILED'); console.info('AudioRecLog: file create : FAILED');
return; return;
} }
if (fd !== null) { if (fd !== null) {
console.info('AudioRecLog: file fd opened in append mode'); console.info('AudioRecLog: file fd opened in append mode');
} }
let numBuffersToCapture = 150; // 循环写入150次 let numBuffersToCapture = 150; // 循环写入150次
let count = 0; let count = 0;
while (numBuffersToCapture) { while (numBuffersToCapture) {
let bufferSize = await audioCapturer.getBufferSize(); this.bufferSize = await this.audioCapturer.getBufferSize();
let buffer = await audioCapturer.read(bufferSize, true); let buffer = await this.audioCapturer.read(this.bufferSize, true);
let options = { let options = {
offset: count * this.bufferSize, offset: count * this.bufferSize,
length: this.bufferSize length: this.bufferSize
...@@ -127,22 +128,23 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -127,22 +128,23 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
numBuffersToCapture--; numBuffersToCapture--;
count++; count++;
} }
}
``` ```
4. 采集完成后,调用stop方法,停止录制。 4. 采集完成后,调用stop方法,停止录制。
```js ```js
async function StopCapturer() { async StopCapturer() {
let state = audioCapturer.state; let state = this.audioCapturer.state;
// 只有采集器状态为STATE_RUNNING或STATE_PAUSED的时候才可以停止 // 只有采集器状态为STATE_RUNNING或STATE_PAUSED的时候才可以停止
if (state != audio.AudioState.STATE_RUNNING && state != audio.AudioState.STATE_PAUSED) { if (state != audio.AudioState.STATE_RUNNING && state != audio.AudioState.STATE_PAUSED) {
console.info('AudioRecLog: Capturer is not running or paused'); console.info('AudioRecLog: Capturer is not running or paused');
return; return;
} }
await audioCapturer.stop(); await this.audioCapturer.stop();
state = audioCapturer.state; state = this.audioCapturer.state;
if (state == audio.AudioState.STATE_STOPPED) { if (state == audio.AudioState.STATE_STOPPED) {
console.info('AudioRecLog: Capturer stopped'); console.info('AudioRecLog: Capturer stopped');
} else { } else {
...@@ -154,17 +156,17 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -154,17 +156,17 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
5. 任务结束,调用release()方法释放相关资源。 5. 任务结束,调用release()方法释放相关资源。
```js ```js
async function releaseCapturer() { async releaseCapturer() {
let state = audioCapturer.state; let state = this.audioCapturer.state;
// 采集器状态不是STATE_RELEASED或STATE_NEW状态,才能release // 采集器状态不是STATE_RELEASED或STATE_NEW状态,才能release
if (state == audio.AudioState.STATE_RELEASED || state == audio.AudioState.STATE_NEW) { if (state == audio.AudioState.STATE_RELEASED || state == audio.AudioState.STATE_NEW) {
console.info('AudioRecLog: Capturer already released'); console.info('AudioRecLog: Capturer already released');
return; return;
} }
await audioCapturer.release(); await this.audioCapturer.release();
state = audioCapturer.state; state = this.audioCapturer.state;
if (state == audio.AudioState.STATE_RELEASED) { if (state == audio.AudioState.STATE_RELEASED) {
console.info('AudioRecLog: Capturer released'); console.info('AudioRecLog: Capturer released');
} else { } else {
...@@ -178,23 +180,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -178,23 +180,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
通过以下代码,可以获取采集器的相关信息。 通过以下代码,可以获取采集器的相关信息。
```js ```js
async getAudioCapturerInfo(){
// 获取当前采集器状态 // 获取当前采集器状态
let state = audioCapturer.state; let state = this.audioCapturer.state;
// 获取采集器信息 // 获取采集器信息
let audioCapturerInfo : audio.AuduioCapturerInfo = await audioCapturer.getCapturerInfo(); let audioCapturerInfo : audio.AudioCapturerInfo = await this.audioCapturer.getCapturerInfo();
// 获取音频流信息 // 获取音频流信息
let audioStreamInfo : audio.AudioStreamInfo = await audioCapturer.getStreamInfo(); let audioStreamInfo : audio.AudioStreamInfo = await this.audioCapturer.getStreamInfo();
// 获取音频流ID // 获取音频流ID
let audioStreamId : number = await audioCapturer.getAudioStreamId(); let audioStreamId : number = await this.audioCapturer.getAudioStreamId();
// 获取纳秒形式的Unix时间戳 // 获取纳秒形式的Unix时间戳
let audioTime : number = await audioCapturer.getAudioTime(); let audioTime : number = await this.audioCapturer.getAudioTime();
// 获取合理的最小缓冲区大小 // 获取合理的最小缓冲区大小
let bufferSize : number = await audioCapturer.getBufferSize(); let bufferSize : number = await this.audioCapturer.getBufferSize();
}
``` ```
7. (可选)使用on('markReach')方法订阅采集器标记到达事件,使用off('markReach')取消订阅事件。 7. (可选)使用on('markReach')方法订阅采集器标记到达事件,使用off('markReach')取消订阅事件。
...@@ -202,12 +201,13 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -202,12 +201,13 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
注册markReach监听后,当采集器采集的帧数到达设定值时,会触发回调并返回设定的值。 注册markReach监听后,当采集器采集的帧数到达设定值时,会触发回调并返回设定的值。
```js ```js
audioCapturer.on('markReach', (reachNumber) => { async markReach(){
this.audioCapturer.on('markReach', 10, (reachNumber) => {
console.info('Mark reach event Received'); console.info('Mark reach event Received');
console.info(`The Capturer reached frame: ${reachNumber}`); console.info(`The Capturer reached frame: ${reachNumber}`);
}); });
this.audioCapturer.off('markReach'); // 取消markReach事件的订阅,后续将无法监听到“标记到达”事件
audioCapturer.off('markReach'); // 取消markReach事件的订阅,后续将无法监听到“标记到达”事件 }
``` ```
8. (可选)使用on('periodReach')方法订阅采集器区间标记到达事件,使用off('periodReach')取消订阅事件。 8. (可选)使用on('periodReach')方法订阅采集器区间标记到达事件,使用off('periodReach')取消订阅事件。
...@@ -215,18 +215,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -215,18 +215,20 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
注册periodReach监听后,**每当**采集器采集的帧数到达设定值时,会触发回调并返回设定的值。 注册periodReach监听后,**每当**采集器采集的帧数到达设定值时,会触发回调并返回设定的值。
```js ```js
audioCapturer.on('periodReach', (reachNumber) => { async periodReach(){
this.audioCapturer.on('periodReach', 10, (reachNumber) => {
console.info('Period reach event Received'); console.info('Period reach event Received');
console.info(`In this period, the Capturer reached frame: ${reachNumber}`); console.info(`In this period, the Capturer reached frame: ${reachNumber}`);
}); });
this.audioCapturer.off('periodReach'); // 取消periodReach事件的订阅,后续将无法监听到“区间标记到达”事件
audioCapturer.off('periodReach'); // 取消periodReach事件的订阅,后续将无法监听到“区间标记到达”事件 }
``` ```
9. 如果应用需要在采集器状态更新时进行一些操作,可以订阅该事件,当采集器状态更新时,会受到一个包含有事件类型的回调。 9. 如果应用需要在采集器状态更新时进行一些操作,可以订阅该事件,当采集器状态更新时,会受到一个包含有事件类型的回调。
```js ```js
audioCapturer.on('stateChange', (state) => { async stateChange(){
this.audioCapturer.on('stateChange', (state) => {
console.info(`AudioCapturerLog: Changed State to : ${state}`) console.info(`AudioCapturerLog: Changed State to : ${state}`)
switch (state) { switch (state) {
case audio.AudioState.STATE_PREPARED: case audio.AudioState.STATE_PREPARED:
...@@ -251,4 +253,5 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以 ...@@ -251,4 +253,5 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
break; break;
} }
}); });
}
``` ```
\ No newline at end of file
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
- 应用程序包结构 - 应用程序包结构
- [Stage模型应用程序包结构](application-package-structure-stage.md) - [Stage模型应用程序包结构](application-package-structure-stage.md)
- [FA模型应用程序包结构](application-package-structure-fa.md) - [FA模型应用程序包结构](application-package-structure-fa.md)
- [HAR包结构](har-structure.md)
- 应用程序包多HAP机制 - 应用程序包多HAP机制
- [多HAP机制设计目标](multi-hap-objective.md) - [多HAP机制设计目标](multi-hap-objective.md)
- [多HAP构建视图](multi-hap-build-view.md) - [多HAP构建视图](multi-hap-build-view.md)
...@@ -20,6 +19,12 @@ ...@@ -20,6 +19,12 @@
- [多HAP运行机制及数据通信方式](multi-hap-principles.md) - [多HAP运行机制及数据通信方式](multi-hap-principles.md)
- [应用程序包安装和卸载流程](application-package-install-uninstall.md) - [应用程序包安装和卸载流程](application-package-install-uninstall.md)
- [应用程序包更新流程](application-package-update.md) - [应用程序包更新流程](application-package-update.md)
- 共享包
- [共享包概述](shared-guide.md)
- [HAR](har-package.md)
- HSP
- [应用内HSP开发指导](in-app-hsp.md)
- [应用间HSP开发指导(仅对系统应用开放)](cross-app-hsp.md)
- 应用程序包快速修复 - 应用程序包快速修复
- [快速修复概述](quickfix-principles.md) - [快速修复概述](quickfix-principles.md)
- [快速修复调试指导](quickfix-debug.md) - [快速修复调试指导](quickfix-debug.md)
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
基于[Stage模型](application-configuration-file-overview-stage.md)开发的应用,经编译打包后,其应用程序包结构如下图**应用程序包结构(Stage模型)**所示。开发者需要熟悉应用程序包结构相关的基本概念。 基于[Stage模型](application-configuration-file-overview-stage.md)开发的应用,经编译打包后,其应用程序包结构如下图**应用程序包结构(Stage模型)**所示。开发者需要熟悉应用程序包结构相关的基本概念。
- 在开发态,一个应用包含一个或者多个Module,可以在[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio/)工程中[创建一个或者多个Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3)。Module是OpenHarmony应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于[HAR](har-structure.md)(Harmony Ability Resources)包,即编译后的.tgz文件 - 在开发态,一个应用包含一个或者多个Module,可以在[DevEco Studio](https://developer.harmonyos.com/cn/develop/deveco-studio/)工程中[创建一个或者多个Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3)。Module是OpenHarmony应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。Module分为“Ability”和“Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library”类型的Module对应于[HAR](har-package.md)(Harmony Archive),或者[HSP](shared-guide.md)(Harmony Shared Package)
一个Module可以包含一个或多个[UIAbility](../application-models/uiability-overview.md)组件,如**Module与UIAbility组件关系示意图**所示。 一个Module可以包含一个或多个[UIAbility](../application-models/uiability-overview.md)组件,如**Module与UIAbility组件关系示意图**所示。
**图1** Module与UIAbility组件关系示意图 **图1** Module与UIAbility组件关系示意图
......
# 应用间HSP开发指导 # 应用间HSP开发指导
应用间`HSP`用于不同应用间的代码、资源共享。 应用间`HSP`用于不同应用间的代码、资源共享。
应用间`HSP`的宿主应用是一种特殊状态的应用,只能由一个[HSP](hsp-guide.md)包组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用。当普通应用运行时,通过动态调用的方式使用应用间`HSP`提供的能力,从而实现应用自身所需要的功能。 应用间`HSP`的宿主应用是一种特殊状态的应用,只能由一个`HSP`组成,不会独立运行在设备上,而是被普通应用模块的依赖项引用。当普通应用运行时,通过动态调用的方式使用应用间`HSP`提供的能力,从而实现应用自身所需要的功能。
## 注意事项
1. 应用间`HSP`的代码会运行再开发者应用的进程中,调用相关代码时,需要做好异常捕获与容错处理,防止由于应用间`HSP`功能异常导致的稳定性问题。
2. 一个应用可以同时依赖多个应用间`HSP`
3. 应用间`HSP`会影响开发者应用自身的启动时间,依赖过多的应用间`HSP`可能会导致启动时延发生明显的劣化,建议将依赖的数目控制在16个以内。
4. 当前三方开发者开发者只能使用系统提供的应用间`HSP`,不支持开发并发布自己的应用间`HSP`
## 应用间HSP的使用 ## 应用间HSP的使用
应用间HSP会分为两部分对外发布: 应用间HSP会分为两部分对外发布:
一部分为[HAR](har-package.md),这部分`HAR`包中不会包含具体的功能实现代码,而仅仅包含导出的对象与方法,所以体积很小。应用开发者将`HAR`包集成到自身的工程中,然后就可以通过调用`HAR`中提供的对象与方法完成自身的应用功能。 一部分为[HAR](har-package.md),这部分`HAR`中不会包含具体的功能实现代码,而仅仅包含导出的对象与方法,所以体积很小。应用开发者将`HAR`集成到自身的工程中,然后就可以通过调用`HAR`中提供的对象与方法完成自身的应用功能。
另外一部分为[HSP](hsp-guide.md),这部分为应用间`HSP`的具体实现,里面包含js/ts代码、C++库、资源和配置文件。这部分会上架到应用市场或者集成到系统版本中。 另外一部分为HSP,这部分为应用间`HSP`的具体实现,里面包含js/ts代码、C++库、资源和配置文件。这部分会上架到应用市场或者集成到系统版本中。
### 集成应用间HSP的HAR ### 集成应用间HSP的HAR
`HAR`中的`index.d.ets`文件是应用间`HSP`导出的声明文件的入口,所有需要导出的接口,统一在`index.d.ets`文件中定义。`index.d.ets`文件路径如下: `HAR`中的`index.d.ets`文件是应用间`HSP`导出的声明文件的入口,所有需要导出的接口,统一在`index.d.ets`文件中定义。`index.d.ets`文件路径如下:
``` ```
src src
├── main ├── main
...@@ -110,8 +116,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) { ...@@ -110,8 +116,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) {
napi_module_register(&demoModule); napi_module_register(&demoModule);
} }
``` ```
### 使用HAR导出的能力 ### 使用HAR导出的能力
引用`HAR`包前,需要先配置对`HAR`的依赖,配置方式可参考[文档](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)`HAR`配置成功后,在配置模块的`module.json`中会生成相关依赖项信息,如下所示: 引用`HAR`前,需要先配置对`HAR`的依赖,配置方式可参考[文档](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)`HAR`配置成功后,在配置模块的`module.json`中会生成相关依赖项信息,如下所示:
```json ```json
"dependencies": [ "dependencies": [
{ {
...@@ -122,8 +128,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) { ...@@ -122,8 +128,8 @@ extern "C" __attribute__((constructor)) void RegisterLibaModule(void) {
] ]
``` ```
其中`bundleName`为应用间`HSP``bundle`名称,`moduleName`为应用间`HSP`的模块名称,`versionCode`为应用间`HSP`的版本号。 其中`bundleName`为应用间`HSP``bundle`名称,`moduleName`为应用间`HSP`的模块名称,`versionCode`为应用间`HSP`的版本号。
#### **使用HAR中的ArkUI组件** #### **使用HAR中的ArkUI组件**
`HAR`共享包的依赖配置成功后,可以引用`HAR`共享包的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入`HAR`共享包导出的ArkUI组件,示例如下所示: `HAR`的依赖配置成功后,可以引用`HAR`的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入`HAR`导出的ArkUI组件,示例如下所示:
``` ts ``` ts
import { UIComponent } from 'liba' import { UIComponent } from 'liba'
...@@ -133,7 +139,7 @@ struct Index { ...@@ -133,7 +139,7 @@ struct Index {
@State message: string = 'Hello World' @State message: string = 'Hello World'
build() { build() {
Row() { Row() {
// 引用HAR共享包的ArkUI组件 // 引用HAR的ArkUI组件
UIComponent() UIComponent()
Column() { Column() {
Text(this.message) Text(this.message)
...@@ -147,8 +153,8 @@ struct Index { ...@@ -147,8 +153,8 @@ struct Index {
} }
``` ```
#### **使用HAR中的ts方法** #### **使用HAR中的ts方法**
通过`import`引用`HAR`共享包导出的ts类和方法,示例如下所示: 通过`import`引用`HAR`导出的ts类和方法,示例如下所示:
``` ts ``` ts
import { foo1 } from 'liba' import { foo1 } from 'liba'
import { foo2 } from 'liba' import { foo2 } from 'liba'
...@@ -160,7 +166,7 @@ struct Index { ...@@ -160,7 +166,7 @@ struct Index {
Column() { Column() {
Button('Button') Button('Button')
.onClick(()=>{ .onClick(()=>{
// 引用HAR共享包的ts方法 // 引用HAR的ts方法
foo1(); foo1();
foo2(); foo2();
}) })
...@@ -171,8 +177,8 @@ struct Index { ...@@ -171,8 +177,8 @@ struct Index {
} }
} }
``` ```
#### **使用HAR中的native方法** #### **使用HAR中的native方法**
通过`import`引用`HAR`共享包导出的native方法,示例如下所示: 通过`import`引用`HAR`导出的native方法,示例如下所示:
``` ts ``` ts
import { nativeHello } from 'liba' import { nativeHello } from 'liba'
...@@ -183,7 +189,7 @@ struct Index { ...@@ -183,7 +189,7 @@ struct Index {
Column() { Column() {
Button('Button') Button('Button')
.onClick(()=>{ .onClick(()=>{
// 引用HAR共享包的native方法 // 引用HAR的native方法
nativeHello(); nativeHello();
}) })
} }
...@@ -196,26 +202,20 @@ struct Index { ...@@ -196,26 +202,20 @@ struct Index {
## 应用间HSP的分发方式 ## 应用间HSP的分发方式
应用间`HSP`由于并未直接完整的集成到开发者应用中去,所以需要提前预置在系统版本中或者随开发者应用同步安装到设备上,主要有以下两种形式: 应用间`HSP`由于并未直接完整的集成到开发者应用中去,所以需要提前预置在系统版本中或者随开发者应用同步安装到设备上,主要有以下两种形式:
1. 随系统发布,部分常用应用间`HSP`会预置在系统版本中 1. 随系统发布,部分常用应用间`HSP`会预置在系统版本中
2. 随应用发布,即用户在应用市场下载应用时,如果应用依赖了一个或者多个应用间`HSP`,同时设备上没有安装这个其依赖的应用间`HSP`时,应用市场会为用户同时下载普通应用以及其依赖的应用间`HSP`。从而保证普通应用能够正常使用共享库的功能。 2. 随应用发布,即用户在应用市场下载应用时,如果应用依赖了一个或者多个应用间`HSP`,同时设备上没有安装这个其依赖的应用间`HSP`时,应用市场会为用户同时下载普通应用以及其依赖的应用间`HSP`。从而保证普通应用能够正常使用共享库的功能。
### 应用间HSP的调试方式 ### 应用间HSP的调试方式
开发者本地调试应用间`HSP`相关的功能时,可能并不具备上述分发的条件,此时可以通过`bm`相关指令本地完成应用间`HSP`的分发,主要步骤如下: 开发者本地调试应用间`HSP`相关的功能时,可能并不具备上述分发的条件,此时可以通过`bm`相关指令本地完成应用间`HSP`的分发,主要步骤如下:
1. 获取到应用间`HSP`的安装包 1. 获取到应用间`HSP`的安装包
2. 通过`bm`指令先安装应用间`HSP`的安装包 2. 通过`bm`指令先安装应用间`HSP`的安装包
``` ```
bm install -s sharebundle.hsp bm install -s sharebundle.hsp
``` ```
3. 通过`bm`指令后安装开发者自身的应用`hap` 3. 通过`bm`指令后安装开发者自身的应用`hap`
``` ```
bm install -p feature.hap bm install -p feature.hap
``` ```
4. 启动开发者自身的应用,调试相关功能 4. 启动开发者自身的应用,调试相关功能
**注意**:步骤2和步骤3不可以颠倒,否则会由于缺少必要的应用间`HSP`导致开发者的应用安装失败。更多`bm`相关指令可以参考[文档](https://gitee.com/openharmony/bundlemanager_bundle_framework#bm%E5%B7%A5%E5%85%B7%E5%91%BD%E4%BB%A4) **注意**:步骤2和步骤3不可以颠倒,否则会由于缺少必要的应用间`HSP`导致开发者的应用安装失败。更多`bm`相关指令可以参考[文档](https://gitee.com/openharmony/bundlemanager_bundle_framework#bm%E5%B7%A5%E5%85%B7%E5%91%BD%E4%BB%A4)
\ No newline at end of file
## 注意事项
1. 应用间`HSP`的代码会运行再开发者应用的进程中,调用相关代码时,需要做好异常捕获与容错处理,防止由于应用间`HSP`功能异常导致的稳定性问题
2. 一个应用可以同时依赖多个应用间`HSP`
3. 应用间`HSP`会影响开发者应用自身的启动时间,依赖过多的应用间HSP可能会导致启动时延发生明显的劣化,建议将依赖的数目控制在16个以内。
4. 当前三方开发者开发者只能使用系统提供的应用间`HSP`,不支持开发并发布自己的应用间`HSP`
\ No newline at end of file
# HAR # HAR
HAR(Harmony Archive)是Harmony静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR共享包,可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。 HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
## 创建HAR模块 ## 创建HAR模块
HAR对应DevEco Studio工程中的“Library”类型的[Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3),可以通过DevEco Studio创建一个HAR模块。HAR模块默认不开启混淆能力,开启混淆能力,需要把HAR模块的build-profile.json5文件中的artifactType字段设置为obfuscation,配置如下所示: HAR对应DevEco Studio工程中的“Library”类型的[Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3),可以通过DevEco Studio创建一个HAR模块。HAR模块默认不开启混淆能力,开启混淆能力,需要把HAR模块的build-profile.json5文件中的artifactType字段设置为obfuscation,配置如下所示:
```json ```json
{ {
...@@ -19,7 +19,7 @@ artifactType字段有以下两种取值,默认缺省为original。 ...@@ -19,7 +19,7 @@ artifactType字段有以下两种取值,默认缺省为original。
需要对代码资产进行保护时,建议开启混淆能力,混淆能力开启后,DevEco Studio在构建HAR时,会对代码进行编译、混淆及压缩处理,保护代码资产。 需要对代码资产进行保护时,建议开启混淆能力,混淆能力开启后,DevEco Studio在构建HAR时,会对代码进行编译、混淆及压缩处理,保护代码资产。
注意:artifactType字段设置为obfuscation时,apiType字段必须设置为stageMode,因为Stage模型才支持混淆。 注意:artifactType字段设置为obfuscation时,apiType字段必须设置为stageMode,因为Stage模型才支持混淆。
## HAR共享包开发注意事项 ## HAR开发注意事项
- HAR不支持在配置文件中声明abilities、extensionAbilities组件。 - HAR不支持在配置文件中声明abilities、extensionAbilities组件。
- HAR不支持在配置文件中声明pages页面。 - HAR不支持在配置文件中声明pages页面。
- HAR不支持在build-profile.json5文件的buildOption中配置worker。 - HAR不支持在build-profile.json5文件的buildOption中配置worker。
...@@ -27,7 +27,7 @@ artifactType字段有以下两种取值,默认缺省为original。 ...@@ -27,7 +27,7 @@ artifactType字段有以下两种取值,默认缺省为original。
- Stage模型的HAR,不能引用AppScope内的内容。在编译构建时APPScope中的内容不会打包到HAR中,导致HAR资源引用失败。 - Stage模型的HAR,不能引用AppScope内的内容。在编译构建时APPScope中的内容不会打包到HAR中,导致HAR资源引用失败。
## 导出HAR的ArkUI组件、接口、资源 ## 导出HAR的ArkUI组件、接口、资源
index.ets文件是HAR共享包导出声明文件的入口,HAR共享包需要导出的接口,统一在index.ets文件中导出。index.ets文件是DevEco Studio默认自动生成的,用户也可以自定义,在模块的package.json文件中的main字段配置入口声明文件,配置如下所示: index.ets文件是HAR导出声明文件的入口,HAR需要导出的接口,统一在index.ets文件中导出。index.ets文件是DevEco Studio默认自动生成的,用户也可以自定义,在模块的package.json文件中的main字段配置入口声明文件,配置如下所示:
```json ```json
{ {
"main": "index.ets" "main": "index.ets"
...@@ -84,17 +84,17 @@ export { func } from './src/main/ts/test' ...@@ -84,17 +84,17 @@ export { func } from './src/main/ts/test'
export { func2 } from './src/main/ts/test' export { func2 } from './src/main/ts/test'
``` ```
### 资源 ### 资源
HAR模块编译打包时会把资源打包到HAR中。在编译构建HAP时,DevEco Studio会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,DevEco Studio会按照以下优先级进行覆盖(优先级由高到低): HAR模块编译打包时会把资源打包到HAR中。在编译构建HAP时,DevEco Studio会从HAP模块及依赖的模块中收集资源文件,如果不同模块下的资源文件出现重名冲突时,DevEco Studio会按照以下优先级进行覆盖(优先级由高到低):
- AppScope(仅API9的Stage模型支持)。 - AppScope(仅API9的Stage模型支持)。
- HAP包自身模块。 - HAP包自身模块。
- 依赖的HAR模块,如果依赖的多个HAR之间有资源冲突,会按照依赖顺序进行覆盖(依赖顺序在前的优先级较高)。 - 依赖的HAR模块,如果依赖的多个HAR之间有资源冲突,会按照依赖顺序进行覆盖(依赖顺序在前的优先级较高)。
## 引用HAR的ArkUI组件、接口、资源 ## 引用HAR的ArkUI组件、接口、资源
引用HAR共享包前,需要先配置对HAR的依赖,配置方式可[参考](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391) 引用HAR前,需要先配置对HAR的依赖,配置方式可[参考](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434#section89674298391)
### 引用HAR共享包的ArkUI组件 ### 引用HAR的ArkUI组件
HAR共享包的依赖配置成功后,可以引用HAR共享包的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入HAR共享包导出的ArkUI组件,示例如下所示: HAR的依赖配置成功后,可以引用HAR的ArkUI组件。ArkUI组件的导入方式与ts的导入方式一致,通过`import`引入HAR导出的ArkUI组件,示例如下所示:
```js ```js
// entry/src/main/ets/pages/index.ets // entry/src/main/ets/pages/index.ets
import { MainPage } from "@ohos/library" import { MainPage } from "@ohos/library"
...@@ -105,7 +105,7 @@ struct Index { ...@@ -105,7 +105,7 @@ struct Index {
@State message: string = 'Hello World' @State message: string = 'Hello World'
build() { build() {
Row() { Row() {
// 引用HAR共享包的ArkUI组件 // 引用HAR的ArkUI组件
MainPage() MainPage()
Column() { Column() {
Text(this.message) Text(this.message)
...@@ -118,8 +118,8 @@ struct Index { ...@@ -118,8 +118,8 @@ struct Index {
} }
} }
``` ```
### 引用HAR共享包的类和方法 ### 引用HAR的类和方法
通过`import`引用HAR共享包导出的ts类和方法,示例如下所示: 通过`import`引用HAR导出的ts类和方法,示例如下所示:
```js ```js
// entry/src/main/ets/pages/index.ets // entry/src/main/ets/pages/index.ets
import { Log } from "@ohos/library" import { Log } from "@ohos/library"
...@@ -133,7 +133,7 @@ struct Index { ...@@ -133,7 +133,7 @@ struct Index {
Column() { Column() {
Button('Button') Button('Button')
.onClick(()=>{ .onClick(()=>{
// 引用HAR共享包的类和方法 // 引用HAR的类和方法
Log.info("har msg"); Log.info("har msg");
func(); func();
}) })
...@@ -144,8 +144,8 @@ struct Index { ...@@ -144,8 +144,8 @@ struct Index {
} }
} }
``` ```
### 引用HAR共享包的资源 ### 引用HAR的资源
通过`$r`引用HAR共享包中的资源,例如在HAR模块的`src/main/resources`里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示例如下所示: 通过`$r`引用HAR中的资源,例如在HAR模块的`src/main/resources`里添加字符串资源(在string.json中定义,name:hello_har)和图片资源(icon_har.png),然后在Entry模块中引用该字符串和图片资源的示例如下所示:
```js ```js
// entry/src/main/ets/pages/index.ets // entry/src/main/ets/pages/index.ets
@Entry @Entry
...@@ -154,11 +154,11 @@ struct Index { ...@@ -154,11 +154,11 @@ struct Index {
build() { build() {
Row() { Row() {
Column() { Column() {
// 引用HAR共享包的字符串资源 // 引用HAR的字符串资源
Text($r("app.string.hello_har")) Text($r("app.string.hello_har"))
.fontSize(50) .fontSize(50)
.fontWeight(FontWeight.Bold) .fontWeight(FontWeight.Bold)
// 引用HAR共享包的图片资源 // 引用HAR的图片资源
Image($r("app.media.icon_har")) Image($r("app.media.icon_har"))
} }
.width('100%') .width('100%')
......
# HAR包结构
[HAR(Harmony Archive)](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-development-npm-package-0000001222578434)是Harmony静态共享包,可以包含代码、C++库、资源和module.json文件(Stage模型)或config.json文件(FA模型)等,用于实现多个模块或多个工程间的代码共享。
HAR包不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
HAR包对应DevEco Studio工程中的“Library”类型的[Module](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/ohos-adding-deleting-module-0000001218760594-V3)
# HSP概述
`HSP``Harmony Shared Package`)是Harmony动态共享包,可以包含代码、C++库、资源和配置文件。
`HSP`[HAR(Harmony Achive)](har-package.md)都是为了实现代码和资源的共享,最大的不同之处在于,`HAR`中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。**而`HSP`中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。**
**图1** `HAR``HSP``APP`包中的形态示意图
![in-app-hsp-har](figures/in-app-hsp-har.png)
**HSP旨在解决HAR包存在的几个问题:**
- 多个`HAP`引用相同`HAR`包,导致的`APP`包大小膨胀问题
- 多个`HAP`引用相同`HAR`包,`HAR`包中的一些状态变量无法共享的问题
**HSP的一些约束:**
- `HSP`及其使用方都必须是`Stage`模型
- `HSP`及其使用方都必须使用`esmodule`编译模式
- `HSP`不支持在配置文件中声明`abilities``extensionAbilities`标签
`HSP`按照使用场景可以分为[应用内HSP](in-app-hsp.md)[应用间HSP](cross-app-hsp.md)。它们在配置文件和使用方式等方面有所区别。
\ No newline at end of file
...@@ -110,7 +110,7 @@ export { nativeMulti } from './utils/nativeTest' ...@@ -110,7 +110,7 @@ export { nativeMulti } from './utils/nativeTest'
"library": "file:../library" "library": "file:../library"
} }
``` ```
然后就可以像使用`HAR`一样调用`HSP`的对外接口了。 然后就可以像使用`HAR`一样调用`HSP`的对外接口了。
例如,上面的`library`已经导出了下面这些接口: 例如,上面的`library`已经导出了下面这些接口:
```ts ```ts
// library/src/main/ets/index.ets // library/src/main/ets/index.ets
......
# 共享包概述
OpenHarmony提供了两种共享包,[HAR(Harmony Achive)](har-package.md)静态共享包,和HSP(Harmony Shared Package)动态共享包。
HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。
**图1** `HAR``HSP``APP`包中的形态示意图
![in-app-hsp-har](figures/in-app-hsp-har.png)
**HSP旨在解决HAR存在的几个问题:**
- 多个`HAP`引用相同的`HAR`,导致的`APP`包大小膨胀问题。
- 多个`HAP`引用相同的`HAR``HAR`中的一些状态变量无法共享的问题。
**HSP的一些约束:**
- `HSP`及其使用方都必须是`Stage`模型。
- `HSP`及其使用方都必须使用`esmodule`编译模式。
- `HSP`不支持在配置文件中声明`abilities``extensionAbilities`标签。
`HSP`按照使用场景可以分为[应用内HSP](in-app-hsp.md)[应用间HSP](cross-app-hsp.md)。它们在配置文件和使用方式等方面有所区别。
\ No newline at end of file
...@@ -130,6 +130,15 @@ ...@@ -130,6 +130,15 @@
- [CommonEventPublishData](js-apis-inner-commonEvent-commonEventPublishData.md) - [CommonEventPublishData](js-apis-inner-commonEvent-commonEventPublishData.md)
- [CommonEventSubscriber](js-apis-inner-commonEvent-commonEventSubscriber.md) - [CommonEventSubscriber](js-apis-inner-commonEvent-commonEventSubscriber.md)
- [CommonEventSubscribeInfo](js-apis-inner-commonEvent-commonEventSubscribeInfo.md) - [CommonEventSubscribeInfo](js-apis-inner-commonEvent-commonEventSubscribeInfo.md)
- notification
- [NotificationActionButton](js-apis-inner-notification-notificationActionButton.md)
- [NotificationCommonDef](js-apis-inner-notification-notificationCommonDef.md)
- [NotificationContent](js-apis-inner-notification-notificationContent.md)
- [NotificationFlags](js-apis-inner-notification-notificationFlags.md)
- [NotificationRequest](js-apis-inner-notification-notificationRequest.md)
- [NotificationSlot](js-apis-inner-notification-notificationSlot.md)
- [NotificationTemplate](js-apis-inner-notification-notificationTemplate.md)
- [NotificationUserInput](js-apis-inner-notification-notificationUserInput.md)
- 包管理 - 包管理
- [@ohos.bundle.appControl (appControl模块)](js-apis-appControl.md) - [@ohos.bundle.appControl (appControl模块)](js-apis-appControl.md)
- [@ohos.bundle.bundleManager (bundleManager模块)](js-apis-bundleManager.md) - [@ohos.bundle.bundleManager (bundleManager模块)](js-apis-bundleManager.md)
...@@ -189,7 +198,7 @@ ...@@ -189,7 +198,7 @@
- [@ohos.intl (国际化-Intl)](js-apis-intl.md) - [@ohos.intl (国际化-Intl)](js-apis-intl.md)
- [@ohos.resourceManager (资源管理)](js-apis-resource-manager.md) - [@ohos.resourceManager (资源管理)](js-apis-resource-manager.md)
- 资源调度 - 后台任务
- [@ohos.distributedMissionManager (分布式任务管理)](js-apis-distributedMissionManager.md) - [@ohos.distributedMissionManager (分布式任务管理)](js-apis-distributedMissionManager.md)
- [@ohos.reminderAgentManager (后台代理提醒)](js-apis-reminderAgentManager.md) - [@ohos.reminderAgentManager (后台代理提醒)](js-apis-reminderAgentManager.md)
- [@ohos.resourceschedule.backgroundTaskManager (后台任务管理)](js-apis-resourceschedule-backgroundTaskManager.md) - [@ohos.resourceschedule.backgroundTaskManager (后台任务管理)](js-apis-resourceschedule-backgroundTaskManager.md)
......
...@@ -139,7 +139,7 @@ grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permiss ...@@ -139,7 +139,7 @@ grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permiss
| --------- | ------------------- | ---- | ------------------------------------------------------------ | | --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | | tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 |
| permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | | permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 |
| permissionFlags | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | | permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 |
**返回值:** **返回值:**
...@@ -196,7 +196,7 @@ grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permiss ...@@ -196,7 +196,7 @@ grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permiss
| --------- | ------------------- | ---- | ------------------------------------------------------------ | | --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。| | tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。|
| permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | | permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 |
| permissionFlags | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | | permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 |
| callback | AsyncCallback&lt;void&gt; | 是 | 授予应用user grant权限。当授予权限成功时,err为undefine;否则为错误对象。 | | callback | AsyncCallback&lt;void&gt; | 是 | 授予应用user grant权限。当授予权限成功时,err为undefine;否则为错误对象。 |
**错误码:** **错误码:**
...@@ -250,7 +250,7 @@ revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permis ...@@ -250,7 +250,7 @@ revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permis
| --------- | ------------------- | ---- | ------------------------------------------------------------ | | --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | | tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 |
| permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | | permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 |
| permissionFlags | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | | permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 |
**返回值:** **返回值:**
...@@ -307,7 +307,7 @@ revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permis ...@@ -307,7 +307,7 @@ revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permis
| --------- | ------------------- | ---- | ------------------------------------------------------------ | | --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | | tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 |
| permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | | permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 |
| permissionFlags | number | 是 | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。 | | permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 |
| callback | AsyncCallback&lt;void&gt; | 是 | 撤销应用user grant权限。当撤销权限成功时,err为undefine;否则为错误对象。 | | callback | AsyncCallback&lt;void&gt; | 是 | 撤销应用user grant权限。当撤销权限成功时,err为undefine;否则为错误对象。 |
**错误码:** **错误码:**
...@@ -461,6 +461,7 @@ on(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionLi ...@@ -461,6 +461,7 @@ on(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionLi
```js ```js
import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl';
import bundle from '@ohos.bundle.bundleManager';
let atManager = abilityAccessCtrl.createAtManager(); let atManager = abilityAccessCtrl.createAtManager();
let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100);
...@@ -511,6 +512,7 @@ off(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionL ...@@ -511,6 +512,7 @@ off(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionL
```js ```js
import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl'; import abilityAccessCtrl, {Permissions} from '@ohos.abilityAccessCtrl';
import bundle from '@ohos.bundle.bundleManager';
let atManager = abilityAccessCtrl.createAtManager(); let atManager = abilityAccessCtrl.createAtManager();
let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100); let appInfo = bundle.getApplicationInfoSync('com.example.myapplication', 0, 100);
...@@ -582,7 +584,7 @@ requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permission ...@@ -582,7 +584,7 @@ requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permission
以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md) 以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 | | 错误码ID | 错误信息 |
| -------- | -------- | | -------- | -------- |
| 12100001 | Parameter invalid. | | 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
**示例:** **示例:**
...@@ -628,7 +630,7 @@ requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permission ...@@ -628,7 +630,7 @@ requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permission
以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md) 以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 | | 错误码ID | 错误信息 |
| -------- | -------- | | -------- | -------- |
| 12100001 | Parameter invalid. | | 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
**示例:** **示例:**
......
...@@ -4539,15 +4539,15 @@ let filePath = path + '/StarWars10s-2C-48000-4SW.wav'; ...@@ -4539,15 +4539,15 @@ let filePath = path + '/StarWars10s-2C-48000-4SW.wav';
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let stat = await fs.stat(path); let stat = await fs.stat(path);
let buf = new ArrayBuffer(bufferSize); let buf = new ArrayBuffer(bufferSize);
let len = stat.size % this.bufferSize == 0 ? Math.floor(stat.size / this.bufferSize) : Math.floor(stat.size / this.bufferSize + 1); let len = stat.size % bufferSize == 0 ? Math.floor(stat.size / bufferSize) : Math.floor(stat.size / bufferSize + 1);
for (let i = 0;i < len; i++) { for (let i = 0;i < len; i++) {
let options = { let options = {
offset: i * this.bufferSize, offset: i * bufferSize,
length: this.bufferSize length: bufferSize
} }
let readsize = await fs.read(file.fd, buf, options) let readsize = await fs.read(file.fd, buf, options)
let writeSize = await new Promise((resolve,reject)=>{ let writeSize = await new Promise((resolve,reject)=>{
this.audioRenderer.write(buf,(err,writeSize)=>{ audioRenderer.write(buf,(err,writeSize)=>{
if(err){ if(err){
reject(err) reject(err)
}else{ }else{
...@@ -4593,15 +4593,15 @@ let filePath = path + '/StarWars10s-2C-48000-4SW.wav'; ...@@ -4593,15 +4593,15 @@ let filePath = path + '/StarWars10s-2C-48000-4SW.wav';
let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY);
let stat = await fs.stat(path); let stat = await fs.stat(path);
let buf = new ArrayBuffer(bufferSize); let buf = new ArrayBuffer(bufferSize);
let len = stat.size % this.bufferSize == 0 ? Math.floor(stat.size / this.bufferSize) : Math.floor(stat.size / this.bufferSize + 1); let len = stat.size % bufferSize == 0 ? Math.floor(stat.size / bufferSize) : Math.floor(stat.size / bufferSize + 1);
for (let i = 0;i < len; i++) { for (let i = 0;i < len; i++) {
let options = { let options = {
offset: i * this.bufferSize, offset: i * bufferSize,
length: this.bufferSize length: bufferSize
} }
let readsize = await fs.read(file.fd, buf, options) let readsize = await fs.read(file.fd, buf, options)
try{ try{
let writeSize = await this.audioRenderer.write(buf); let writeSize = await audioRenderer.write(buf);
} catch(err) { } catch(err) {
console.error(`audioRenderer.write err: ${err}`); console.error(`audioRenderer.write err: ${err}`);
} }
......
# OverlayModuleInfo
> **说明:**
> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
OverlayModuleInfo信息,系统应用可以通过[overlay.getOverlayModuleInfoByBundleName](js-apis-overlay.md#overlaygetoverlaymoduleinfobybundlename)获取指定应用的overlay特征module的OverlayModuleInfo信息,三方应用可以通过[overlay.getOverlayModuleInfo](js-apis-overlay.md#overlaygetoverlaymoduleinfo)获取当前应用中overlay特征module的OverlayModuleInfo信息。
## OverlayModuleInfo
**系统能力:** 以下各项对应的系统能力均为SystemCapability.BundleManager.BundleFramework.Overlay。
| 名称 | 类型 | 可读 | 可写 | 说明 |
| --------------------- | ---------------------------------------------------| ---- | ---- | ---------------------------------------------- |
| bundleName | string | 是 | 否 | overlay特征module所属的应用的bundle名称。 |
| moduleName | string | 是 | 否 | overlay特征module的HAP名称。 |
| targetModuleName | string | 是 | 否 | overlay特征module指定的目标module的HAP名称。 |
| priority | number | 是 | 否 | overlay特征module的优先级。 |
| state | number | 是 | 否 | overlay特征module的禁用使能状态。0代表禁用状态; 1代表使能状态。 |
\ No newline at end of file
...@@ -30,7 +30,7 @@ getRdbStore(context: Context, config: StoreConfig, callback: AsyncCallback&lt;Rd ...@@ -30,7 +30,7 @@ getRdbStore(context: Context, config: StoreConfig, callback: AsyncCallback&lt;Rd
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------------------------------------------- | ---- | ------------------------------------------------------------ | | -------- | ---------------------------------------------- | ---- | ------------------------------------------------------------ |
| context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 | | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
| config | [StoreConfig](#storeconfig) | 是 | 与此RDB存储相关的数据库配置。 | | config | [StoreConfig](#storeconfig) | 是 | 与此RDB存储相关的数据库配置。 |
| callback | AsyncCallback&lt;[RdbStore](#rdbstore)&gt; | 是 | 指定callback回调函数,返回RdbStore对象。 | | callback | AsyncCallback&lt;[RdbStore](#rdbstore)&gt; | 是 | 指定callback回调函数,返回RdbStore对象。 |
...@@ -108,7 +108,7 @@ getRdbStore(context: Context, config: StoreConfig): Promise&lt;RdbStore&gt; ...@@ -108,7 +108,7 @@ getRdbStore(context: Context, config: StoreConfig): Promise&lt;RdbStore&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------- | -------------------------------- | ---- | ------------------------------------------------------------ | | ------- | -------------------------------- | ---- | ------------------------------------------------------------ |
| context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 | | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
| config | [StoreConfig](#storeconfig) | 是 | 与此RDB存储相关的数据库配置。 | | config | [StoreConfig](#storeconfig) | 是 | 与此RDB存储相关的数据库配置。 |
**返回值** **返回值**
...@@ -188,7 +188,7 @@ deleteRdbStore(context: Context, name: string, callback: AsyncCallback&lt;void&g ...@@ -188,7 +188,7 @@ deleteRdbStore(context: Context, name: string, callback: AsyncCallback&lt;void&g
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ------------------------------------------------------------ | | -------- | ------------------------- | ---- | ------------------------------------------------------------ |
| context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 | | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
| name | string | 是 | 数据库名称。 | | name | string | 是 | 数据库名称。 |
| callback | AsyncCallback&lt;void&gt; | 是 | 指定callback回调函数。 | | callback | AsyncCallback&lt;void&gt; | 是 | 指定callback回调函数。 |
...@@ -249,7 +249,7 @@ deleteRdbStore(context: Context, name: string): Promise&lt;void&gt; ...@@ -249,7 +249,7 @@ deleteRdbStore(context: Context, name: string): Promise&lt;void&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------- | ------- | ---- | ------------------------------------------------------------ | | ------- | ------- | ---- | ------------------------------------------------------------ |
| context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 | | context | Context | 是 | 应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
| name | string | 是 | 数据库名称。 | | name | string | 是 | 数据库名称。 |
**返回值** **返回值**
...@@ -2612,9 +2612,9 @@ store.sync(relationalStore.SyncMode.SYNC_MODE_PUSH, predicates, function (err, r ...@@ -2612,9 +2612,9 @@ store.sync(relationalStore.SyncMode.SYNC_MODE_PUSH, predicates, function (err, r
let predicates = new relationalStore.RdbPredicates('EMPLOYEE'); let predicates = new relationalStore.RdbPredicates('EMPLOYEE');
predicates.inDevices(['12345678abcde']); predicates.inDevices(['12345678abcde']);
let promise = store.sync(relationalStore.SyncMode.SYNC_MODE_PUSH, predicates); let promise = store.sync(relationalStore.SyncMode.SYNC_MODE_PUSH, predicates);
promise.then((resultSet) =>{ promise.then((result) =>{
console.info(`Sync done.`); console.info(`Sync done.`);
for (let i = 0; i < resultSet.length; i++) { for (let i = 0; i < result.length; i++) {
console.info(`device= ${result[i][0]}, status= ${result[i][1]}`); console.info(`device= ${result[i][0]}, status= ${result[i][1]}`);
} }
}).catch((err) => { }).catch((err) => {
...@@ -2693,10 +2693,12 @@ try { ...@@ -2693,10 +2693,12 @@ try {
首先需要获取resultSet对象。 首先需要获取resultSet对象。
```js ```js
let resultSet = null;
let predicates = new relationalStore.RdbPredicates("EMPLOYEE"); let predicates = new relationalStore.RdbPredicates("EMPLOYEE");
predicates.equalTo("AGE", 18); predicates.equalTo("AGE", 18);
let promise = store.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]); let promise = store.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]);
promise.then((resultSet) => { promise.then((result) => {
resultSet = result;
console.info(`resultSet columnNames: ${resultSet.columnNames}`); console.info(`resultSet columnNames: ${resultSet.columnNames}`);
console.info(`resultSet columnCount: ${resultSet.columnCount}`); console.info(`resultSet columnCount: ${resultSet.columnCount}`);
}); });
...@@ -2867,7 +2869,7 @@ goToRow(position: number): boolean ...@@ -2867,7 +2869,7 @@ goToRow(position: number): boolean
let predicates = new relationalStore.RdbPredicates("EMPLOYEE"); let predicates = new relationalStore.RdbPredicates("EMPLOYEE");
let promise = store.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]); let promise = store.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"]);
promise.then((resultSet) => { promise.then((resultSet) => {
resultSet.(5); resultSet.goToRow(5);
resultSet.close(); resultSet.close();
}).catch((err) => { }).catch((err) => {
console.error(`query failed, err: ${err}`); console.error(`query failed, err: ${err}`);
......
...@@ -28,7 +28,7 @@ import distributedKVStore from '@ohos.data.distributedKVStore'; ...@@ -28,7 +28,7 @@ import distributedKVStore from '@ohos.data.distributedKVStore';
| 名称 | 类型 | 必填 | 说明 | | 名称 | 类型 | 必填 | 说明 |
| ---------- | --------------------- | ---- | ------------------------------------------------------------ | | ---------- | --------------------- | ---- | ------------------------------------------------------------ |
| context | Context | 是 |应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 | | context | Context | 是 |应用的上下文。 <br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-uiAbilityContext.md)。 |
| bundleName | string | 是 | 调用方的包名。 | | bundleName | string | 是 | 调用方的包名。 |
## Constants ## Constants
...@@ -1242,7 +1242,7 @@ reset(): Query ...@@ -1242,7 +1242,7 @@ reset(): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------------- | | -------------- | --------------------- |
| [Query](query) | 返回重置的Query对象。 | | [Query](#query) | 返回重置的Query对象。 |
**示例:** **示例:**
...@@ -1278,7 +1278,7 @@ equalTo(field: string, value: number|string|boolean): Query ...@@ -1278,7 +1278,7 @@ equalTo(field: string, value: number|string|boolean): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1312,7 +1312,7 @@ notEqualTo(field: string, value: number|string|boolean): Query ...@@ -1312,7 +1312,7 @@ notEqualTo(field: string, value: number|string|boolean): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1345,7 +1345,7 @@ greaterThan(field: string, value: number|string|boolean): Query ...@@ -1345,7 +1345,7 @@ greaterThan(field: string, value: number|string|boolean): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1380,7 +1380,7 @@ lessThan(field: string, value: number|string): Query ...@@ -1380,7 +1380,7 @@ lessThan(field: string, value: number|string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1415,7 +1415,7 @@ greaterThanOrEqualTo(field: string, value: number|string): Query ...@@ -1415,7 +1415,7 @@ greaterThanOrEqualTo(field: string, value: number|string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1450,7 +1450,7 @@ lessThanOrEqualTo(field: string, value: number|string): Query ...@@ -1450,7 +1450,7 @@ lessThanOrEqualTo(field: string, value: number|string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1483,7 +1483,7 @@ isNull(field: string): Query ...@@ -1483,7 +1483,7 @@ isNull(field: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1517,7 +1517,7 @@ inNumber(field: string, valueList: number[]): Query ...@@ -1517,7 +1517,7 @@ inNumber(field: string, valueList: number[]): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1551,7 +1551,7 @@ inString(field: string, valueList: string[]): Query ...@@ -1551,7 +1551,7 @@ inString(field: string, valueList: string[]): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1585,7 +1585,7 @@ notInNumber(field: string, valueList: number[]): Query ...@@ -1585,7 +1585,7 @@ notInNumber(field: string, valueList: number[]): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1619,7 +1619,7 @@ notInString(field: string, valueList: string[]): Query ...@@ -1619,7 +1619,7 @@ notInString(field: string, valueList: string[]): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1653,7 +1653,7 @@ like(field: string, value: string): Query ...@@ -1653,7 +1653,7 @@ like(field: string, value: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1687,7 +1687,7 @@ unlike(field: string, value: string): Query ...@@ -1687,7 +1687,7 @@ unlike(field: string, value: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1714,7 +1714,7 @@ and(): Query ...@@ -1714,7 +1714,7 @@ and(): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | -------------- | | -------------- | -------------- |
| [Query](query) | 返回查询对象。 | | [Query](#query) | 返回查询对象。 |
**示例:** **示例:**
...@@ -1743,7 +1743,7 @@ or(): Query ...@@ -1743,7 +1743,7 @@ or(): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | -------------- | | -------------- | -------------- |
| [Query](query) | 返回查询对象。 | | [Query](#query) | 返回查询对象。 |
**示例:** **示例:**
...@@ -1778,7 +1778,7 @@ orderByAsc(field: string): Query ...@@ -1778,7 +1778,7 @@ orderByAsc(field: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1812,7 +1812,7 @@ orderByDesc(field: string): Query ...@@ -1812,7 +1812,7 @@ orderByDesc(field: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1847,7 +1847,7 @@ limit(total: number, offset: number): Query ...@@ -1847,7 +1847,7 @@ limit(total: number, offset: number): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1883,7 +1883,7 @@ isNotNull(field: string): Query ...@@ -1883,7 +1883,7 @@ isNotNull(field: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1910,7 +1910,7 @@ beginGroup(): Query ...@@ -1910,7 +1910,7 @@ beginGroup(): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1939,7 +1939,7 @@ endGroup(): Query ...@@ -1939,7 +1939,7 @@ endGroup(): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -1974,7 +1974,7 @@ prefixKey(prefix: string): Query ...@@ -1974,7 +1974,7 @@ prefixKey(prefix: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -2008,7 +2008,7 @@ setSuggestIndex(index: string): Query ...@@ -2008,7 +2008,7 @@ setSuggestIndex(index: string): Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -2042,7 +2042,7 @@ deviceId(deviceId:string):Query ...@@ -2042,7 +2042,7 @@ deviceId(deviceId:string):Query
| 类型 | 说明 | | 类型 | 说明 |
| -------------- | --------------- | | -------------- | --------------- |
| [Query](query) | 返回Query对象。 | | [Query](#query) | 返回Query对象。 |
**示例:** **示例:**
...@@ -3086,7 +3086,7 @@ getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void ...@@ -3086,7 +3086,7 @@ getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------- | ---- | ----------------------------------------------- | | -------- | -------------------------------------- | ---- | ----------------------------------------------- |
| query | [Query](query) | 是 | 表示要匹配的键前缀。 | | query | [Query](#query) | 是 | 表示要匹配的键前缀。 |
| callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回与指定Query对象匹配的键值对列表。 | | callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回与指定Query对象匹配的键值对列表。 |
**错误码:** **错误码:**
...@@ -3148,7 +3148,7 @@ getEntries(query: Query): Promise&lt;Entry[]&gt; ...@@ -3148,7 +3148,7 @@ getEntries(query: Query): Promise&lt;Entry[]&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -3414,7 +3414,7 @@ getResultSet(query: Query): Promise&lt;KVStoreResultSet&gt; ...@@ -3414,7 +3414,7 @@ getResultSet(query: Query): Promise&lt;KVStoreResultSet&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -3661,7 +3661,7 @@ getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void ...@@ -3661,7 +3661,7 @@ getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------- | ---- | ------------------------------------------- | | -------- | --------------------------- | ---- | ------------------------------------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
| callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与指定Query对象匹配的结果数。 | | callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与指定Query对象匹配的结果数。 |
**错误码:** **错误码:**
...@@ -3719,7 +3719,7 @@ getResultSize(query: Query): Promise&lt;number&gt; ...@@ -3719,7 +3719,7 @@ getResultSize(query: Query): Promise&lt;number&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -4548,7 +4548,7 @@ sync(deviceIds: string[], query: Query, mode: SyncMode, delayMs?: number): void ...@@ -4548,7 +4548,7 @@ sync(deviceIds: string[], query: Query, mode: SyncMode, delayMs?: number): void
| --------- | --------------------- | ---- | ---------------------------------------------- | | --------- | --------------------- | ---- | ---------------------------------------------- |
| deviceIds | string[] | 是 | 同一组网环境下,需要同步的设备的deviceId列表。 | | deviceIds | string[] | 是 | 同一组网环境下,需要同步的设备的deviceId列表。 |
| mode | [SyncMode](#syncmode) | 是 | 同步模式。 | | mode | [SyncMode](#syncmode) | 是 | 同步模式。 |
| query | [Query](query) | 是 | 表示数据库的查询谓词条件 | | query | [Query](#query) | 是 | 表示数据库的查询谓词条件 |
| delayMs | number | 否 | 可选参数,允许延时时间,单位:ms(毫秒)。 | | delayMs | number | 否 | 可选参数,允许延时时间,单位:ms(毫秒)。 |
**错误码:** **错误码:**
...@@ -5324,7 +5324,7 @@ getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void ...@@ -5324,7 +5324,7 @@ getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------- | ---- | ----------------------------------------------------- | | -------- | -------------------------------------- | ---- | ----------------------------------------------------- |
| query | [Query](query) | 是 | 表示要匹配的键前缀。 | | query | [Query](#query) | 是 | 表示要匹配的键前缀。 |
| callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回本设备与指定Query对象匹配的键值对列表。 | | callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回本设备与指定Query对象匹配的键值对列表。 |
**错误码:** **错误码:**
...@@ -5386,7 +5386,7 @@ getEntries(query: Query): Promise&lt;Entry[]&gt; ...@@ -5386,7 +5386,7 @@ getEntries(query: Query): Promise&lt;Entry[]&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -5453,7 +5453,7 @@ getEntries(deviceId: string, query: Query, callback: AsyncCallback&lt;Entry[]&gt ...@@ -5453,7 +5453,7 @@ getEntries(deviceId: string, query: Query, callback: AsyncCallback&lt;Entry[]&gt
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------------------------- | ---- | ------------------------------------------------------- | | -------- | -------------------------------------- | ---- | ------------------------------------------------------- |
| deviceId | string | 是 | 键值对所属的设备ID。 | | deviceId | string | 是 | 键值对所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
| callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的键值对列表。 | | callback | AsyncCallback&lt;[Entry](#entry)[]&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的键值对列表。 |
**错误码:** **错误码:**
...@@ -5522,7 +5522,7 @@ getEntries(deviceId: string, query: Query): Promise&lt;Entry[]&gt; ...@@ -5522,7 +5522,7 @@ getEntries(deviceId: string, query: Query): Promise&lt;Entry[]&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------- | ---- | -------------------- | | -------- | -------------- | ---- | -------------------- |
| deviceId | string | 是 | 键值对所属的设备ID。 | | deviceId | string | 是 | 键值对所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -5830,7 +5830,7 @@ getResultSet(deviceId: string, query: Query, callback: AsyncCallback&lt;KVStoreR ...@@ -5830,7 +5830,7 @@ getResultSet(deviceId: string, query: Query, callback: AsyncCallback&lt;KVStoreR
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
| deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 | | deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
| callback | AsyncCallback&lt;[KVStoreResultSet](#kvstoreresultset)&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的KVStoreResultSet对象。 | | callback | AsyncCallback&lt;[KVStoreResultSet](#kvstoreresultset)&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的KVStoreResultSet对象。 |
**错误码:** **错误码:**
...@@ -5902,7 +5902,7 @@ getResultSet(deviceId: string, query: Query): Promise&lt;KVStoreResultSet&gt; ...@@ -5902,7 +5902,7 @@ getResultSet(deviceId: string, query: Query): Promise&lt;KVStoreResultSet&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------- | ---- | ---------------------------------- | | -------- | -------------- | ---- | ---------------------------------- |
| deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 | | deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -5975,7 +5975,7 @@ getResultSet(query: Query): Promise&lt;KVStoreResultSet&gt; ...@@ -5975,7 +5975,7 @@ getResultSet(query: Query): Promise&lt;KVStoreResultSet&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -6041,7 +6041,7 @@ getResultSet(deviceId: string, query: Query): Promise&lt;KVStoreResultSet&gt; ...@@ -6041,7 +6041,7 @@ getResultSet(deviceId: string, query: Query): Promise&lt;KVStoreResultSet&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------- | ---- | ---------------------------------- | | -------- | -------------- | ---- | ---------------------------------- |
| deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 | | deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -6341,7 +6341,7 @@ getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void ...@@ -6341,7 +6341,7 @@ getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------- | ---- | ------------------------------------------------- | | -------- | --------------------------- | ---- | ------------------------------------------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
| callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与本设备指定Query对象匹配的结果数。 | | callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与本设备指定Query对象匹配的结果数。 |
**错误码:** **错误码:**
...@@ -6399,7 +6399,7 @@ getResultSize(query: Query): Promise&lt;number&gt; ...@@ -6399,7 +6399,7 @@ getResultSize(query: Query): Promise&lt;number&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | -------------- | ---- | -------------- | | ------ | -------------- | ---- | -------------- |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
...@@ -6463,7 +6463,7 @@ getResultSize(deviceId: string, query: Query, callback: AsyncCallback&lt;number& ...@@ -6463,7 +6463,7 @@ getResultSize(deviceId: string, query: Query, callback: AsyncCallback&lt;number&
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------- | ---- | --------------------------------------------------- | | -------- | --------------------------- | ---- | --------------------------------------------------- |
| deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 | | deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
| callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的结果数。 | | callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回与指定设备ID和Query对象匹配的结果数。 |
**错误码:** **错误码:**
...@@ -6527,7 +6527,7 @@ getResultSize(deviceId: string, query: Query): Promise&lt;number&gt; ...@@ -6527,7 +6527,7 @@ getResultSize(deviceId: string, query: Query): Promise&lt;number&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------- | ---- | ---------------------------------- | | -------- | -------------- | ---- | ---------------------------------- |
| deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 | | deviceId | string | 是 | KVStoreResultSet对象所属的设备ID。 |
| query | [Query](query) | 是 | 表示查询对象。 | | query | [Query](#query) | 是 | 表示查询对象。 |
**返回值:** **返回值:**
......
...@@ -161,4 +161,4 @@ emitter.emit(innerEvent, eventData); ...@@ -161,4 +161,4 @@ emitter.emit(innerEvent, eventData);
| 名称 | 类型 | 可读 | 可写 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ---- | ------------------ | ---- | ---- | -------------- | | ---- | ------------------ | ---- | ---- | -------------- |
| data | [key: string]: any | 是 | 是 | 发送事件时传递的数据,数据类型支持字符串、整型和布尔型。 | | data | [key: string]: any | 是 | 是 | 发送事件时传递的数据,数据类型支持字符串、整型和布尔型。<br> 其中字符串长度最大为10240字节。 |
...@@ -393,7 +393,7 @@ async function example() { ...@@ -393,7 +393,7 @@ async function example() {
console.error('DocumentViewPicker.save failed with err: ' + err); console.error('DocumentViewPicker.save failed with err: ' + err);
}); });
} catch (err) { } catch (err) {
console.errort('DocumentViewPicker failed with err: ' + err); console.error('DocumentViewPicker failed with err: ' + err);
} }
} }
``` ```
...@@ -429,7 +429,7 @@ async function example() { ...@@ -429,7 +429,7 @@ async function example() {
console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult)); console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult));
}); });
} catch (err) { } catch (err) {
console.errort('DocumentViewPicker failed with err: ' + err); console.error('DocumentViewPicker failed with err: ' + err);
} }
} }
``` ```
...@@ -462,7 +462,7 @@ async function example() { ...@@ -462,7 +462,7 @@ async function example() {
console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult)); console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult));
}); });
} catch (err) { } catch (err) {
console.errort('DocumentViewPicker failed with err: ' + err); console.error('DocumentViewPicker failed with err: ' + err);
} }
} }
``` ```
......
...@@ -6,6 +6,7 @@ fileAccess模块是基于extension机制实现的一个对公共文件访问和 ...@@ -6,6 +6,7 @@ fileAccess模块是基于extension机制实现的一个对公共文件访问和
> >
>- 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 >- 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
>- 本模块接口为系统接口,三方应用不支持调用,当前只支持filepicker、文件管理器调用。 >- 本模块接口为系统接口,三方应用不支持调用,当前只支持filepicker、文件管理器调用。
>- 本模块支持对错误码进行处理,错误码及其适配方式[参考文档](../errorcodes/errorcode-filemanagement.md#错误码适配指导)。
## 导入模块 ## 导入模块
...@@ -1017,6 +1018,241 @@ access(sourceFileUri: string, callback: AsyncCallback&lt;boolean&gt;) : void; ...@@ -1017,6 +1018,241 @@ access(sourceFileUri: string, callback: AsyncCallback&lt;boolean&gt;) : void;
}; };
``` ```
## FileAccessHelper.getFileInfoFromUri<sup>10+</sup>
getFileInfoFromUri(uri: string) : Promise<FileInfo>;
以异步方法获取uri对应的[FileInfo](#fileinfo)对象。使用promise异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | -- |
| uri | string | 是 | 文件(夹)的Uri |
**返回值:**
| 类型 | 说明 |
| --- | -- |
| [FileInfo](#fileinfo) | FileInfo对象 |
**示例:**
```js
// 以媒体库uri为例
// 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
// 开发者应根据自己实际获取的uri进行开发
let sourceUri = "datashare:///media/file/6";
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
let fileInfo = await fileAccessHelper.getFileInfoFromUri(sourceUri);
} catch (error) {
console.error("getFileInfoFromUri failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## FileAccessHelper.getFileInfoFromUri<sup>10+</sup>
getFileInfoFromUri(uri: string, callback: AsyncCallback<FileInfo>) : void;
以异步方法获取uri对应的[FileInfo](#fileinfo)对象。使用callback异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | -- |
| uri | string | 是 | 文件(夹)的Uri |
| callback | AsyncCallback&lt;string&gt; | 是 | uri对应的FileInfo对象 |
**示例:**
```js
// 以媒体库uri为例
// 示例代码sourceUri表示Download目录,该uri是对应的fileInfo中uri
// 开发者应根据自己实际获取的uri进行开发
let sourceUri = "datashare:///media/file/6";
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
fileAccessHelper.getFileInfoFromUri(sourceUri, function (err, fileInfo) {
if (err) {
console.error("Failed to getFileInfoFromUri in async, errCode:" + err.code + ", errMessage:" + err.message);
return;
}
console.log("getFileInfoFromUri success, fileInfo: " + JSON.stringify(fileInfo));
});
} catch (error) {
console.error("getFileInfoFromUri failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## FileAccessHelper.getFileInfoFromRelativePath<sup>10+</sup>
getFileInfoFromRelativePath(relativePath: string) : Promise<FileInfo>;
以异步方法获取relativePath对应的[FileInfo](#fileinfo)对象。使用promise异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | -- |
| relativePath | string | 是 | 文件(夹)的相对路径 |
**返回值:**
| 类型 | 说明 |
| --- | -- |
| [FileInfo](#fileinfo) | FileInfo对象 |
**示例:**
```js
// 以媒体库relativePath为例
// 示例代码relativePath表示Download目录,该relativePath是对应的fileInfo中relativePath
// 开发者应根据自己实际获取的relativePath进行开发
let relativePath = "Download/";
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
let fileInfo = await fileAccessHelper.getFileInfoFromRelativePath(relativePath);
} catch (error) {
console.error("getFileInfoFromRelativePath failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## FileAccessHelper.getFileInfoFromRelativePath<sup>10+</sup>
getFileInfoFromRelativePath(relativePath: string, callback: AsyncCallback<FileInfo>) : void;
以异步方法获取relativePath对应的[FileInfo](#fileinfo)对象。使用callback异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | -- |
| relativePath | string | 是 | 文件(夹)的相对路径 |
| callback | AsyncCallback&lt;string&gt; | 是 | relativePath对应的FileInfo对象 |
**示例:**
```js
// 以媒体库relativePath为例
// 示例代码relativePath表示Download目录,该relativePath是对应的fileInfo中relativePath
// 开发者应根据自己实际获取的relativePath进行开发
let relativePath = "Download/";
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
fileAccessHelper.getFileInfoFromRelativePath(relativePath, function (err, fileInfo) {
if (err) {
console.error("Failed to getFileInfoFromRelativePath in async, errCode:" + err.code + ", errMessage:" + err.message);
return;
}
console.log("getFileInfoFromRelativePath success, fileInfo: " + JSON.stringify(fileInfo));
});
} catch (error) {
console.error("getFileInfoFromRelativePath failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## FileAccessHelper.getThumbnail<sup>10+</sup>
getThumbnail(uri: string, size: image.Size) : Promise&lt;image.PixelMap&gt;
通过指定uri和尺寸获取媒体文件的Pixelmap对象,使用Promise异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| ------ | ----------------------------------- | ---- | ----------- |
| uri | string | 是 | 媒体文件uri |
| size | [image.Size](js-apis-image.md#size) | 是 | 缩略图尺寸 |
**返回值:**
| 类型 | 说明 |
| :---------------------------- | :----------------- |
| Promise&lt;image.PixelMap&gt; | 返回的Pixelmap对象 |
**示例:**
```js
// 以媒体库uri为例
// 示例代码targetUri表示Download目录下某个媒体文件(图片、音频、视频),该uri是对应的fileInfo中uri
// 开发者应根据自己实际获取的uri进行开发
let targetUri = "datashare:///media/image/100";
let size = { width: 128, height: 128 };
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
let pixelMap = await fileAccessHelper.getThumbnail(targetUri, size);
let imageInfo = await pixelMap.getImageInfo();
console.log("getThumbnail sucess, pixelMap.width: " + imageInfo.size.width);
console.log("getThumbnail sucess, pixelMap.height: " + imageInfo.size.height);
} catch (error) {
console.error("getThumbnail failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## FileAccessHelper.getThumbnail<sup>10+</sup>
getThumbnail(uri: string, size: image.Size, callback: AsyncCallback&lt;image.PixelMap&gt;) : void
通过指定uri和尺寸获取媒体文件的Pixelmap对象,使用callback异步回调。
**系统能力**:SystemCapability.FileManagement.UserFileService
**需要权限**:ohos.permission.FILE_ACCESS_MANAGER
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------- | ---- | ------------------ |
| uri | string | 是 | 媒体文件uri |
| size | [image.Size](js-apis-image.md#size) | 是 | 缩略图尺寸 |
| callback | AsyncCallback&lt;image.PixelMap&gt; | 是 | 返回的Pixelmap对象 |
**示例:**
```js
// 以媒体库uri为例
// 示例代码targetUri表示Download目录下某个媒体文件(图片、音频、视频),该uri是对应的fileInfo中uri
// 开发者应根据自己实际获取的uri进行开发
let targetUri = "datashare:///media/image/100";
let size = { width: 128, height: 128 };
try {
// fileAccessHelper 参考 fileAccess.createFileAccessHelper 示例代码获取
fileAccessHelper.getThumbnail(targetUri, size, async(err, pixelMap) => {
if (err) {
console.error("Failed to getThumbnail in async, errCode:" + err.code + ", errMessage:" + err.message);
return;
}
let imageInfo = await pixelMap.getImageInfo();
console.log("getThumbnail sucess, pixelMap.width: " + imageInfo.size.width);
console.log("getThumbnail sucess, pixelMap.height: " + imageInfo.size.height);
});
} catch (error) {
console.error("getThumbnail failed, errCode:" + error.code + ", errMessage:" + error.message);
};
```
## RootIterator.next ## RootIterator.next
next( ) : { value: RootInfo, done: boolean } next( ) : { value: RootInfo, done: boolean }
...@@ -1063,6 +1299,7 @@ FileIterator表示文件夹的迭代器对象,可以通过next同步方法获 ...@@ -1063,6 +1299,7 @@ FileIterator表示文件夹的迭代器对象,可以通过next同步方法获
| ------ | ------ | -------- | ------ | -------- | | ------ | ------ | -------- | ------ | -------- |
| deviceType | number | 是 | 否 |设备类型 | | deviceType | number | 是 | 否 |设备类型 |
| uri | string | 是 | 否 | 设备根目录Uri | | uri | string | 是 | 否 | 设备根目录Uri |
| relativePath<sup>10+</sup> | string | 是 | 否 | 根目录的相对路径 |
| displayName | string | 是 | 否 | 设备名称 | | displayName | string | 是 | 否 | 设备名称 |
| deviceFlags | number | 是 | 否 | 设备支持的能力 | | deviceFlags | number | 是 | 否 | 设备支持的能力 |
...@@ -1079,6 +1316,7 @@ FileIterator表示文件夹的迭代器对象,可以通过next同步方法获 ...@@ -1079,6 +1316,7 @@ FileIterator表示文件夹的迭代器对象,可以通过next同步方法获
| 名称 | 类型 | 可读 | 可写 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ------ | ------ | -------- | ------ | -------- | | ------ | ------ | -------- | ------ | -------- |
| uri | string | 是 | 否 | 文件(夹)的uri | | uri | string | 是 | 否 | 文件(夹)的uri |
| relativePath<sup>10+</sup> | string | 是 | 否 | 文件(夹)的相对路径 |
| fileName | string | 是 | 否 | 文件(夹)的名称 | | fileName | string | 是 | 否 | 文件(夹)的名称 |
| mode | number | 是 | 否 | 文件(夹)的权限信息 | | mode | number | 是 | 否 | 文件(夹)的权限信息 |
| size | number | 是 | 否 | 文件(夹)的大小 | | size | number | 是 | 否 | 文件(夹)的大小 |
......
...@@ -67,7 +67,7 @@ httpRequest.request( ...@@ -67,7 +67,7 @@ httpRequest.request(
## http.createHttp ## http.createHttp
createHttp\(\): HttpRequest createHttp(): HttpRequest
创建一个HTTP请求,里面包括发起请求、中断请求、订阅/取消订阅HTTP Response Header事件。每一个HttpRequest对象对应一个HTTP请求。如需发起多个HTTP请求,须为每个HTTP请求创建对应HttpRequest对象。 创建一个HTTP请求,里面包括发起请求、中断请求、订阅/取消订阅HTTP Response Header事件。每一个HttpRequest对象对应一个HTTP请求。如需发起多个HTTP请求,须为每个HTTP请求创建对应HttpRequest对象。
...@@ -88,11 +88,11 @@ let httpRequest = http.createHttp(); ...@@ -88,11 +88,11 @@ let httpRequest = http.createHttp();
## HttpRequest ## HttpRequest
HTTP请求任务。在调用HttpRequest的方法前,需要先通过[createHttp\(\)](#httpcreatehttp)创建一个任务。 HTTP请求任务。在调用HttpRequest的方法前,需要先通过[createHttp()](#httpcreatehttp)创建一个任务。
### request ### request
request\(url: string, callback: AsyncCallback\<HttpResponse\>\):void request(url: string, callback: AsyncCallback\<HttpResponse\>):void
根据URL地址,发起HTTP网络请求,使用callback方式作为异步方法。 根据URL地址,发起HTTP网络请求,使用callback方式作为异步方法。
...@@ -140,7 +140,7 @@ httpRequest.request("EXAMPLE_URL", (err, data) => { ...@@ -140,7 +140,7 @@ httpRequest.request("EXAMPLE_URL", (err, data) => {
### request ### request
request\(url: string, options: HttpRequestOptions, callback: AsyncCallback\<HttpResponse\>\):void request(url: string, options: HttpRequestOptions, callback: AsyncCallback\<HttpResponse\>):void
根据URL地址和相关配置项,发起HTTP网络请求,使用callback方式作为异步方法。 根据URL地址和相关配置项,发起HTTP网络请求,使用callback方式作为异步方法。
...@@ -223,7 +223,7 @@ httpRequest.request("EXAMPLE_URL", ...@@ -223,7 +223,7 @@ httpRequest.request("EXAMPLE_URL",
### request ### request
request\(url: string, options? : HttpRequestOptions\): Promise\<HttpResponse\> request(url: string, options? : HttpRequestOptions): Promise\<HttpResponse\>
根据URL地址,发起HTTP网络请求,使用Promise方式作为异步方法。 根据URL地址,发起HTTP网络请求,使用Promise方式作为异步方法。
...@@ -309,7 +309,7 @@ promise.then((data) => { ...@@ -309,7 +309,7 @@ promise.then((data) => {
### destroy ### destroy
destroy\(\): void destroy(): void
中断请求任务。 中断请求任务。
...@@ -323,7 +323,7 @@ httpRequest.destroy(); ...@@ -323,7 +323,7 @@ httpRequest.destroy();
### request2<sup>10+</sup> ### request2<sup>10+</sup>
request2(url: string, callback: AsyncCallback<void>): void request2(url: string, callback: AsyncCallback\<void\>): void
根据URL地址和相关配置项,发起HTTP网络请求并返回流式响应,使用callback方式作为异步方法。 根据URL地址和相关配置项,发起HTTP网络请求并返回流式响应,使用callback方式作为异步方法。
...@@ -359,7 +359,7 @@ request2(url: string, callback: AsyncCallback<void>): void ...@@ -359,7 +359,7 @@ request2(url: string, callback: AsyncCallback<void>): void
```js ```js
httpRequest.request2("EXAMPLE_URL", (err) => { httpRequest.request2("EXAMPLE_URL", (err) => {
if (!err) { if (!err) {
console.info(request2 OK!); console.info("request2 OK!");
} else { } else {
console.info("request2 ERROR : err = " + JSON.stringify(err)); console.info("request2 ERROR : err = " + JSON.stringify(err));
} }
...@@ -368,7 +368,7 @@ httpRequest.request2("EXAMPLE_URL", (err) => { ...@@ -368,7 +368,7 @@ httpRequest.request2("EXAMPLE_URL", (err) => {
### request2<sup>10+</sup> ### request2<sup>10+</sup>
request2(url: string, options: HttpRequestOptions, callback: AsyncCallback<void>): void request2(url: string, options: HttpRequestOptions, callback: AsyncCallback\<void\>): void
根据URL地址和相关配置项,发起HTTP网络请求并返回流式响应,使用callback方式作为异步方法。 根据URL地址和相关配置项,发起HTTP网络请求并返回流式响应,使用callback方式作为异步方法。
...@@ -437,7 +437,7 @@ httpRequest.request2("EXAMPLE_URL", ...@@ -437,7 +437,7 @@ httpRequest.request2("EXAMPLE_URL",
connectTimeout: 60000 connectTimeout: 60000
}, (err) => { }, (err) => {
if (!err) { if (!err) {
console.info(request2 OK!); console.info("request2 OK!");
} else { } else {
console.info("request2 ERROR : err = " + JSON.stringify(err)); console.info("request2 ERROR : err = " + JSON.stringify(err));
} }
...@@ -445,7 +445,7 @@ httpRequest.request2("EXAMPLE_URL", ...@@ -445,7 +445,7 @@ httpRequest.request2("EXAMPLE_URL",
``` ```
### request2<sup>10+</sup> ### request2<sup>10+</sup>
request2\(url: string, options? : HttpRequestOptions\): Promise\<void\> request2(url: string, options? : HttpRequestOptions): Promise\<void\>
根据URL地址,发起HTTP网络请求并返回流式响应,使用Promise方式作为异步方法。 根据URL地址,发起HTTP网络请求并返回流式响应,使用Promise方式作为异步方法。
...@@ -518,20 +518,20 @@ let promise = httpRequest.request("EXAMPLE_URL", { ...@@ -518,20 +518,20 @@ let promise = httpRequest.request("EXAMPLE_URL", {
} }
}); });
promise.then(() => { promise.then(() => {
console.info(request2 OK!); console.info("request2 OK!");
}).catch((err) => { }).catch((err) => {
console.info("request2 ERROR : err = " + JSON.stringify(err)); console.info("request2 ERROR : err = " + JSON.stringify(err));
}); });
``` ```
### on\('headerReceive'\) ### on('headerReceive')
on\(type: 'headerReceive', callback: AsyncCallback<Object\>\): void on(type: 'headerReceive', callback: AsyncCallback\<Object\>): void
订阅HTTP Response Header 事件。 订阅HTTP Response Header 事件。
>![](public_sys-resources/icon-note.gif) **说明:** >![](public_sys-resources/icon-note.gif) **说明:**
>此接口已废弃,建议使用[on\('headersReceive'\)<sup>8+</sup>](#onheadersreceive8)替代。 >此接口已废弃,建议使用[on('headersReceive')<sup>8+</sup>](#onheadersreceive8)替代。
**系统能力**:SystemCapability.Communication.NetStack **系统能力**:SystemCapability.Communication.NetStack
...@@ -554,15 +554,15 @@ httpRequest.on('headerReceive', (err, data) => { ...@@ -554,15 +554,15 @@ httpRequest.on('headerReceive', (err, data) => {
}); });
``` ```
### off\('headerReceive'\) ### off('headerReceive')
off\(type: 'headerReceive', callback?: AsyncCallback<Object\>\): void off(type: 'headerReceive', callback?: AsyncCallback\<Object\>): void
取消订阅HTTP Response Header 事件。 取消订阅HTTP Response Header 事件。
>![](public_sys-resources/icon-note.gif) **说明:** >![](public_sys-resources/icon-note.gif) **说明:**
> >
>1. 此接口已废弃,建议使用[off\('headersReceive'\)<sup>8+</sup>](#offheadersreceive8)替代。 >1. 此接口已废弃,建议使用[off('headersReceive')<sup>8+</sup>](#offheadersreceive8)替代。
> >
>2. 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 >2. 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
...@@ -581,9 +581,9 @@ off\(type: 'headerReceive', callback?: AsyncCallback<Object\>\): void ...@@ -581,9 +581,9 @@ off\(type: 'headerReceive', callback?: AsyncCallback<Object\>\): void
httpRequest.off('headerReceive'); httpRequest.off('headerReceive');
``` ```
### on\('headersReceive'\)<sup>8+</sup> ### on('headersReceive')<sup>8+</sup>
on\(type: 'headersReceive', callback: Callback<Object\>\): void on(type: 'headersReceive', callback: Callback\<Object\>): void
订阅HTTP Response Header 事件。 订阅HTTP Response Header 事件。
...@@ -604,9 +604,9 @@ httpRequest.on('headersReceive', (header) => { ...@@ -604,9 +604,9 @@ httpRequest.on('headersReceive', (header) => {
}); });
``` ```
### off\('headersReceive'\)<sup>8+</sup> ### off('headersReceive')<sup>8+</sup>
off\(type: 'headersReceive', callback?: Callback<Object\>\): void off(type: 'headersReceive', callback?: Callback\<Object\>): void
取消订阅HTTP Response Header 事件。 取消订阅HTTP Response Header 事件。
...@@ -628,9 +628,9 @@ off\(type: 'headersReceive', callback?: Callback<Object\>\): void ...@@ -628,9 +628,9 @@ off\(type: 'headersReceive', callback?: Callback<Object\>\): void
httpRequest.off('headersReceive'); httpRequest.off('headersReceive');
``` ```
### once\('headersReceive'\)<sup>8+</sup> ### once('headersReceive')<sup>8+</sup>
once\(type: 'headersReceive', callback: Callback<Object\>\): void once(type: 'headersReceive', callback: Callback\<Object\>): void
订阅HTTP Response Header 事件,但是只触发一次。一旦触发之后,订阅器就会被移除。使用callback方式作为异步方法。 订阅HTTP Response Header 事件,但是只触发一次。一旦触发之后,订阅器就会被移除。使用callback方式作为异步方法。
...@@ -650,9 +650,9 @@ httpRequest.once('headersReceive', (header) => { ...@@ -650,9 +650,9 @@ httpRequest.once('headersReceive', (header) => {
console.info('header: ' + JSON.stringify(header)); console.info('header: ' + JSON.stringify(header));
}); });
``` ```
### on\('dataReceive'\)<sup>10+</sup> ### on('dataReceive')<sup>10+</sup>
on\(type: 'dataReceive', callback: Callback\<ArrayBuffer\>\): void on(type: 'dataReceive', callback: Callback\<ArrayBuffer\>): void
订阅HTTP流式响应数据接收事件。 订阅HTTP流式响应数据接收事件。
...@@ -673,9 +673,9 @@ httpRequest.on('dataReceive', (data) => { ...@@ -673,9 +673,9 @@ httpRequest.on('dataReceive', (data) => {
}); });
``` ```
### off\('dataReceive'\)<sup>10+</sup> ### off('dataReceive')<sup>10+</sup>
off\(type: 'dataReceive', callback?: Callback\<ArrayBuffer\>\): void off(type: 'dataReceive', callback?: Callback\<ArrayBuffer\>): void
取消订阅HTTP流式响应数据接收事件。 取消订阅HTTP流式响应数据接收事件。
...@@ -697,9 +697,9 @@ off\(type: 'dataReceive', callback?: Callback\<ArrayBuffer\>\): void ...@@ -697,9 +697,9 @@ off\(type: 'dataReceive', callback?: Callback\<ArrayBuffer\>\): void
httpRequest.off('dataReceive'); httpRequest.off('dataReceive');
``` ```
### on\('dataEnd'\)<sup>10+</sup> ### on('dataEnd')<sup>10+</sup>
on\(type: 'dataEnd', callback: Callback\<void\>\): void on(type: 'dataEnd', callback: Callback\<void\>): void
订阅HTTP流式响应数据接收完毕事件。 订阅HTTP流式响应数据接收完毕事件。
...@@ -720,7 +720,7 @@ httpRequest.on('dataReceive', () => { ...@@ -720,7 +720,7 @@ httpRequest.on('dataReceive', () => {
}); });
``` ```
### off\('dataEnd'\)<sup>10+</sup> ### off('dataEnd')<sup>10+</sup>
off(type: 'dataEnd', callback?: Callback\<void\>): void off(type: 'dataEnd', callback?: Callback\<void\>): void
...@@ -744,9 +744,9 @@ off(type: 'dataEnd', callback?: Callback\<void\>): void ...@@ -744,9 +744,9 @@ off(type: 'dataEnd', callback?: Callback\<void\>): void
httpRequest.off('dataEnd'); httpRequest.off('dataEnd');
``` ```
### on\('dataProgress'\)<sup>10+</sup> ### on('dataProgress')<sup>10+</sup>
on\(type: 'dataProgress', callback: Callback\<{ receiveSize: number, totalSize: number }\>\): void on(type: 'dataProgress', callback: Callback\<{ receiveSize: number, totalSize: number }\>): void
订阅HTTP流式响应数据接收进度事件。 订阅HTTP流式响应数据接收进度事件。
...@@ -757,7 +757,7 @@ httpRequest.off('dataEnd'); ...@@ -757,7 +757,7 @@ httpRequest.off('dataEnd');
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | ----------------------- | ---- | --------------------------------- | | -------- | ----------------------- | ---- | --------------------------------- |
| type | string | 是 | 订阅的事件类型,'dataProgress'。 | | type | string | 是 | 订阅的事件类型,'dataProgress'。 |
| callback | AsyncCallback\<{ receiveSize: number, totalSize: number }\> | 是 | 回调函数。 | | callback | AsyncCallback\<{ receiveSize: number, totalSize: number }\> | 是 | 回调函数。<br>receiveSize:已接收的数据字节数,totalSize待接收的字节总数 |
**示例:** **示例:**
...@@ -769,7 +769,7 @@ httpRequest.on('dataProgress', (data) => { ...@@ -769,7 +769,7 @@ httpRequest.on('dataProgress', (data) => {
}); });
``` ```
### off\('dataProgress'\)<sup>10+</sup> ### off('dataProgress')<sup>10+</sup>
off(type: 'dataProgress', callback?: Callback\<{ receiveSize: number, totalSize: number }\>): void off(type: 'dataProgress', callback?: Callback\<{ receiveSize: number, totalSize: number }\>): void
...@@ -919,7 +919,7 @@ let httpResponseCache = http.createHttpResponseCache(); ...@@ -919,7 +919,7 @@ let httpResponseCache = http.createHttpResponseCache();
### flush<sup>9+</sup> ### flush<sup>9+</sup>
flush(callback: AsyncCallback\<void>): void flush(callback: AsyncCallback\<void\>): void
将缓存中的数据写入文件系统,以便在下一个HTTP请求中访问所有缓存数据,使用callback方式作为异步方法。 将缓存中的数据写入文件系统,以便在下一个HTTP请求中访问所有缓存数据,使用callback方式作为异步方法。
...@@ -929,7 +929,7 @@ flush(callback: AsyncCallback\<void>): void ...@@ -929,7 +929,7 @@ flush(callback: AsyncCallback\<void>): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------------------- | ---- | ---------- | | -------- | --------------------------------------- | ---- | ---------- |
| callback | AsyncCallback\<void> | 是 | 回调函数返回写入结果。 | | callback | AsyncCallback\<void\> | 是 | 回调函数返回写入结果。 |
**示例:** **示例:**
...@@ -945,7 +945,7 @@ httpResponseCache.flush(err => { ...@@ -945,7 +945,7 @@ httpResponseCache.flush(err => {
### flush<sup>9+</sup> ### flush<sup>9+</sup>
flush(): Promise\<void> flush(): Promise\<void\>
将缓存中的数据写入文件系统,以便在下一个HTTP请求中访问所有缓存数据,使用Promise方式作为异步方法。 将缓存中的数据写入文件系统,以便在下一个HTTP请求中访问所有缓存数据,使用Promise方式作为异步方法。
...@@ -955,7 +955,7 @@ flush(): Promise\<void> ...@@ -955,7 +955,7 @@ flush(): Promise\<void>
| 类型 | 说明 | | 类型 | 说明 |
| --------------------------------- | ------------------------------------- | | --------------------------------- | ------------------------------------- |
| Promise\<void>> | 以Promise形式返回写入结果。 | | Promise\<void\> | 以Promise形式返回写入结果。 |
**示例:** **示例:**
...@@ -969,7 +969,7 @@ httpResponseCache.flush().then(() => { ...@@ -969,7 +969,7 @@ httpResponseCache.flush().then(() => {
### delete<sup>9+</sup> ### delete<sup>9+</sup>
delete(callback: AsyncCallback\<void>): void delete(callback: AsyncCallback\<void\>): void
禁用缓存并删除其中的数据,使用callback方式作为异步方法。 禁用缓存并删除其中的数据,使用callback方式作为异步方法。
...@@ -979,7 +979,7 @@ delete(callback: AsyncCallback\<void>): void ...@@ -979,7 +979,7 @@ delete(callback: AsyncCallback\<void>): void
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | --------------------------------------- | ---- | ---------- | | -------- | --------------------------------------- | ---- | ---------- |
| callback | AsyncCallback\<void> | 是 | 回调函数返回删除结果。| | callback | AsyncCallback\<void\> | 是 | 回调函数返回删除结果。|
**示例:** **示例:**
...@@ -994,7 +994,7 @@ httpResponseCache.delete(err => { ...@@ -994,7 +994,7 @@ httpResponseCache.delete(err => {
``` ```
### delete<sup>9+</sup> ### delete<sup>9+</sup>
delete(): Promise\<void> delete(): Promise\<void\>
禁用缓存并删除其中的数据,使用Promise方式作为异步方法。 禁用缓存并删除其中的数据,使用Promise方式作为异步方法。
...@@ -1004,7 +1004,7 @@ delete(): Promise\<void> ...@@ -1004,7 +1004,7 @@ delete(): Promise\<void>
| 类型 | 说明 | | 类型 | 说明 |
| --------------------------------- | ------------------------------------- | | --------------------------------- | ------------------------------------- |
| Promise\<void> | 以Promise形式返回删除结果。 | | Promise\<void\> | 以Promise形式返回删除结果。 |
**示例:** **示例:**
......
...@@ -1194,7 +1194,7 @@ getInstance(locale?:string): IndexUtil ...@@ -1194,7 +1194,7 @@ getInstance(locale?:string): IndexUtil
**示例:** **示例:**
```js ```js
let indexUtil= I18n.getInstance("zh-CN"); let indexUtil = I18n.getInstance("zh-CN");
``` ```
...@@ -1267,7 +1267,7 @@ getIndex(text: string): string ...@@ -1267,7 +1267,7 @@ getIndex(text: string): string
**示例:** **示例:**
```js ```js
let indexUtil= I18n.getInstance("zh-CN"); let indexUtil = I18n.getInstance("zh-CN");
let index = indexUtil.getIndex("hi"); // index = "H" let index = indexUtil.getIndex("hi"); // index = "H"
``` ```
...@@ -1382,7 +1382,7 @@ first(): number ...@@ -1382,7 +1382,7 @@ first(): number
**示例:** **示例:**
```js ```js
let iterator = i18n.getLineInstance("en"); let iterator = I18n.getLineInstance("en");
iterator.setLineBreakText("Apple is my favorite fruit."); iterator.setLineBreakText("Apple is my favorite fruit.");
let firstPos = iterator.first(); // firstPos = 0 let firstPos = iterator.first(); // firstPos = 0
``` ```
......
...@@ -947,8 +947,18 @@ createImageSource(uri: string): ImageSource ...@@ -947,8 +947,18 @@ createImageSource(uri: string): ImageSource
**示例:** **示例:**
```js ```js
let context = featureAbility.getContext(); //Stage模型
let path = context.getCacheDir() + "test.jpg"; const context = getContext(this);
const path = context.getCacheDir() + "/test.jpg";
const imageSourceApi = image.createImageSource(path);
```
```js
//FA模型
import featureAbility from '@ohos.ability.featureAbility';
const context = featureAbility.getContext();
const path = context.getCacheDir() + "/test.jpg";
const imageSourceApi = image.createImageSource(path); const imageSourceApi = image.createImageSource(path);
``` ```
......
...@@ -492,8 +492,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); ...@@ -492,8 +492,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.getCurrentTopAbility((err : any, data : any) => { abilityDelegator.getCurrentTopAbility((err : any, data : any) => {
console.info('getCurrentTopAbility callback'); console.info('getCurrentTopAbility callback');
ability = data; ability = data;
abilityDelegator.doAbilityForeground(ability, (err : any, data : any) => { abilityDelegator.doAbilityForeground(ability, (err : any) => {
console.info('doAbilityForeground callback'); console.info("doAbilityForeground callback");
}); });
}); });
``` ```
...@@ -528,8 +528,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); ...@@ -528,8 +528,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.getCurrentTopAbility((err : any, data : any) => { abilityDelegator.getCurrentTopAbility((err : any, data : any) => {
console.info('getCurrentTopAbility callback'); console.info('getCurrentTopAbility callback');
ability = data; ability = data;
abilityDelegator.doAbilityForeground(ability).then((data : any) => { abilityDelegator.doAbilityForeground(ability).then(() => {
console.info('doAbilityForeground promise'); console.info("doAbilityForeground promise");
}); });
}); });
``` ```
...@@ -559,8 +559,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); ...@@ -559,8 +559,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.getCurrentTopAbility((err : any, data : any) => { abilityDelegator.getCurrentTopAbility((err : any, data : any) => {
console.info('getCurrentTopAbility callback'); console.info('getCurrentTopAbility callback');
ability = data; ability = data;
abilityDelegator.doAbilityBackground(ability, (err : any, data : any) => { abilityDelegator.doAbilityBackground(ability, (err : any) => {
console.info('doAbilityBackground callback'); console.info("doAbilityBackground callback");
}); });
}); });
``` ```
...@@ -595,8 +595,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); ...@@ -595,8 +595,8 @@ abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.getCurrentTopAbility((err : any, data : any) => { abilityDelegator.getCurrentTopAbility((err : any, data : any) => {
console.info('getCurrentTopAbility callback'); console.info('getCurrentTopAbility callback');
ability = data; ability = data;
abilityDelegator.doAbilityBackground(ability).then((data : any) => { abilityDelegator.doAbilityBackground(ability).then(() => {
console.info('doAbilityBackground promise'); console.info("doAbilityBackground promise");
}); });
}); });
``` ```
......
# NotificationActionButton
描述通知中显示的操作按钮。
> **说明:**
>
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| --------- | ----------------------------------------------- | --- | ---- | ------------------------- |
| title | string | 是 | 是 | 按钮标题。 |
| wantAgent | [WantAgent](js-apis-app-ability-wantAgent.md) | 是 | 是 | 点击按钮时触发的WantAgent。 |
| extras | { [key: string]: any } | 是 | 是 | 按钮扩展信息。 |
| userInput<sup>8+</sup> | [NotificationUserInput](js-apis-inner-notification-notificationUserInput.md) | 是 | 是 | 用户输入对象实例。 |
# NotificationCommonDef
> **说明:**
>
> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## BundleOption
BundleOption模块为指定应用的包信息。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 必填 | 说明 |
| ------ | ------ |---- | ------ |
| bundle | string | 是 | 应用的包信息。 |
| uid | number | 否 | 用户ID。 |
# NotificationContent
描述通知类型。
> **说明:**
>
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ----------- | ------------------------------------------------------------ | ---- | --- | ------------------ |
| contentType | [ContentType](./js-apis-notificationManager.md#contenttype) | 是 | 是 | 通知内容类型。 |
| normal | [NotificationBasicContent](#notificationbasiccontent) | 是 | 是 | 基本类型通知内容。 |
| longText | [NotificationLongTextContent](#notificationlongtextcontent) | 是 | 是 | 长文本类型通知内容。 |
| multiLine | [NotificationMultiLineContent](#notificationmultilinecontent) | 是 | 是 | 多行类型通知内容。 |
| picture | [NotificationPictureContent](#notificationpicturecontent) | 是 | 是 | 图片类型通知内容。 |
## NotificationBasicContent
描述普通文本通知。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------- | ------ | ---- | ---- | ---------------------------------- |
| title | string | 是 | 是 | 通知标题。 |
| text | string | 是 | 是 | 通知内容。 |
| additionalText | string | 是 | 是 | 通知附加内容,是对通知内容的补充。 |
## NotificationLongTextContent
描述长文本通知。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------- | ------ | ---- | --- | -------------------------------- |
| title | string | 是 | 是 | 通知标题。 |
| text | string | 是 | 是 | 通知内容。 |
| additionalText | string | 是 | 是 | 通知附加内容,是对通知内容的补充。 |
| longText | string | 是 | 是 | 通知的长文本。 |
| briefText | string | 是 | 是 | 通知概要内容,是对通知内容的总结。 |
| expandedTitle | string | 是 | 是 | 通知展开时的标题。 |
## NotificationMultiLineContent
描述多行文本通知。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------- | --------------- | --- | --- | -------------------------------- |
| title | string | 是 | 是 | 通知标题。 |
| text | string | 是 | 是 | 通知内容。 |
| additionalText | string | 是 | 是 | 通知附加内容,是对通知内容的补充。 |
| briefText | string | 是 | 是 | 通知概要内容,是对通知内容的总结。 |
| longTitle | string | 是 | 是 | 通知展开时的标题。 |
| lines | Array\<string\> | 是 | 是 | 通知的多行文本。 |
## NotificationPictureContent
描述附有图片的通知。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------- | -------------- | ---- | --- | -------------------------------- |
| title | string | 是 | 是 | 通知标题。 |
| text | string | 是 | 是 | 通知内容。 |
| additionalText | string | 是 | 是 | 通知附加内容,是对通知内容的补充。 |
| briefText | string | 是 | 是 | 通知概要内容,是对通知内容的总结。 |
| expandedTitle | string | 是 | 是 | 通知展开时的标题。 |
| picture | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | 是 | 通知的图片内容。 |
# NotificationFlags
描述通知标志的实例。
> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ---------------- | ---------------------- | ---- | ---- | --------------------------------- |
| soundEnabled | [NotificationFlagStatus](#notificationflagstatus) | 是 | 否 | 是否启用声音提示。 |
| vibrationEnabled | [NotificationFlagStatus](#notificationflagstatus) | 是 | 否 | 是否启用振动提醒功能。 |
## NotificationFlagStatus
描述通知标志状态。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
**系统接口**:此接口为系统接口,三方应用不支持调用。
| 名称 | 值 | 说明 |
| -------------- | --- | --------------------------------- |
| TYPE_NONE | 0 | 默认标志。 |
| TYPE_OPEN | 1 | 通知标志打开。 |
| TYPE_CLOSE | 2 | 通知标志关闭。 |
# NotificationRequest
描述通知的请求。
> **说明:**
>
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| --------------------- | --------------------------------------------- | ---- | --- | -------------------------- |
| content | [NotificationContent](js-apis-inner-notification-notificationContent.md#notificationcontent) | 是 | 是 | 通知内容。 |
| id | number | 是 | 是 | 通知ID。 |
| slotType | [SlotType](js-apis-notificationManager.md#slottype) | 是 | 是 | 通道类型。 |
| isOngoing | boolean | 是 | 是 | 是否进行时通知。 |
| isUnremovable | boolean | 是 | 是 | 是否可移除。 |
| deliveryTime | number | 是 | 是 | 通知发送时间。 |
| tapDismissed | boolean | 是 | 是 | 通知是否自动清除。 |
| autoDeletedTime | number | 是 | 是 | 自动清除的时间。 |
| wantAgent | [WantAgent](js-apis-app-ability-wantAgent.md) | 是 | 是 | WantAgent封装了应用的行为意图,点击通知时触发该行为。 |
| extraInfo | {[key: string]: any} | 是 | 是 | 扩展参数。 |
| color | number | 是 | 是 | 通知背景颜色。预留能力,暂未支持。 |
| colorEnabled | boolean | 是 | 是 | 通知背景颜色是否使能。预留能力,暂未支持。 |
| isAlertOnce | boolean | 是 | 是 | 设置是否仅有一次此通知提醒。 |
| isStopwatch | boolean | 是 | 是 | 是否显示已用时间。 |
| isCountDown | boolean | 是 | 是 | 是否显示倒计时时间。 |
| isFloatingIcon | boolean | 是 | 是 | 是否显示状态栏图标。 |
| label | string | 是 | 是 | 通知标签。 |
| badgeIconStyle | number | 是 | 是 | 通知角标类型。 |
| showDeliveryTime | boolean | 是 | 是 | 是否显示分发时间。 |
| actionButtons | Array\<[NotificationActionButton](js-apis-inner-notification-notificationActionButton.md)\> | 是 | 是 | 通知按钮,最多三个按钮。 |
| smallIcon | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | 是 | 通知小图标。可选字段,大小不超过30KB。 |
| largeIcon | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | 是 | 通知大图标。可选字段,大小不超过30KB。 |
| creatorBundleName | string | 是 | 否 | 创建通知的包名。 |
| creatorUid<sup>8+<sup> | number | 是 | 否 | 创建通知的UID。 |
| creatorPid | number | 是 | 否 | 创建通知的PID。 |
| creatorUserId| number | 是 | 否 | 创建通知的UserId。 |
| hashCode | string | 是 | 否 | 通知唯一标识。 |
| classification | string | 是 | 是 | 通知分类。<br>**系统API**: 此接口为系统接口,三方应用不支持调用。 |
| groupName<sup>8+<sup> | string | 是 | 是 | 组通知名称。 |
| template<sup>8+<sup> | [NotificationTemplate](./js-apis-inner-notification-notificationTemplate.md) | 是 | 是 | 通知模板。 |
| isRemoveAllowed<sup>8+<sup> | boolean | 是 | 否 | 通知是否能被移除。<br>**系统API**: 此接口为系统接口,三方应用不支持调用。 |
| source<sup>8+<sup> | number | 是 | 否 | 通知源。<br>**系统API**: 此接口为系统接口,三方应用不支持调用。 |
| distributedOption<sup>8+<sup> | [DistributedOptions](#distributedoptions) | 是 | 是 | 分布式通知的选项。 |
| deviceId<sup>8+<sup> | string | 是 | 否 | 通知源的deviceId。<br>**系统API**: 此接口为系统接口,三方应用不支持调用。 |
| notificationFlags<sup>8+<sup> | [NotificationFlags](js-apis-inner-notification-notificationflags#notificationFlags) | 是 | 否 | 获取NotificationFlags。 |
| removalWantAgent<sup>9+<sup> | [WantAgent](js-apis-app-ability-wantAgent.md) | 是 | 是 | 当移除通知时,通知将被重定向到的WantAgent实例。 |
| badgeNumber<sup>9+<sup> | number | 是 | 是 | 应用程序图标上显示的通知数。 |
## DistributedOptions
描述分布式选项。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ---------------------- | -------------- | ---- | ---- | ---------------------------------- |
| isDistributed<sup>8+<sup> | boolean | 是 | 是 | 是否为分布式通知。 |
| supportDisplayDevices<sup>8+<sup> | Array\<string> | 是 | 是 | 可以同步通知到的设备列表。 |
| supportOperateDevices<sup>8+<sup> | Array\<string> | 是 | 是 | 可以打开通知的设备列表。 |
| remindType<sup>8+<sup> | number | 是 | 否 | 通知的提醒方式。<br>**系统API**: 此接口为系统接口,三方应用不支持调用。 |
# NotificationSlot
描述通知槽
> **说明:**
>
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------------------- | --------------------- | ---- | --- | ------------------------------------------ |
| type | [SlotType](js-apis-notificationManager.md#slottype) | 是 | 是 | 通道类型。 |
| level | number | 是 | 是 | 通知级别,不设置则根据通知渠道类型有默认值。 |
| desc | string | 是 | 是 | 通知渠道描述信息。 |
| badgeFlag | boolean | 是 | 是 | 是否显示角标。 |
| bypassDnd | boolean | 是 | 是 | 置是否在系统中绕过免打扰模式。 |
| lockscreenVisibility | number | 是 | 是 | 在锁定屏幕上显示通知的模式。 |
| vibrationEnabled | boolean | 是 | 是 | 是否可振动。 |
| sound | string | 是 | 是 | 通知提示音。 |
| lightEnabled | boolean | 是 | 是 | 是否闪灯。 |
| lightColor | number | 是 | 是 | 通知灯颜色。 |
| vibrationValues | Array\<number\> | 是 | 是 | 通知振动样式。 |
| enabled<sup>9+</sup> | boolean | 是 | 否 | 此通知插槽中的启停状态。 |
# NotificationTemplate
通知模板。
> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:以下各项对应的系统能力均为SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| ---- | ---------------------- | ---- | ---- | ---------- |
| name | string | 是 | 是 | 模板名称。 |
| data | {[key:string]: Object} | 是 | 是 | 模板数据。 |
# NotificationUserInput
保存用户输入的通知消息。
> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
**系统能力**:SystemCapability.Notification.Notification
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | ------ | --- | ---- | ----------------------------- |
| inputKey | string | 是 | 是 | 用户输入时用于标识此输入的key。 |
...@@ -372,6 +372,10 @@ Audio/Video播放demo可参考:[AVPlayer开发指导](../../media/avplayer-pla ...@@ -372,6 +372,10 @@ Audio/Video播放demo可参考:[AVPlayer开发指导](../../media/avplayer-pla
| width<sup>9+</sup> | number | 是 | 否 | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 | | width<sup>9+</sup> | number | 是 | 否 | 视频宽,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 |
| height<sup>9+</sup> | number | 是 | 否 | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 | | height<sup>9+</sup> | number | 是 | 否 | 视频高,单位为像素(px),可查询参数。<br/>返回为(0)表示无效值,**prepared**/**playing**/**paused**/**completed**状态下有效。 |
**说明:**
将资源句柄(fd)传递给媒体播放器之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个媒体播放器。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致播放异常。
### on('stateChange')<sup>9+</sup><a name = stateChange_on></a> ### on('stateChange')<sup>9+</sup><a name = stateChange_on></a>
on(type: 'stateChange', callback: (state: AVPlayerState, reason: StateChangeReason) => void): void on(type: 'stateChange', callback: (state: AVPlayerState, reason: StateChangeReason) => void): void
......
# @ohos.multimedia.medialibrary (媒体库管理) # @ohos.multimedia.medialibrary (媒体库管理)
> **说明:** > **说明:**
> 该组件从API Version 6开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 > - 该组件从API Version 6开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
> - 从API Version 9开始废弃。保留至API Version 13版本。
> - 部分功能变更为系统接口,仅供系统应用使用,请使用[@ohos.filemanagement.userFileManager](js-apis-userFileManager.md)相应接口替代。
> - 媒体资源选择和保存功能仍开放给普通应用,请使用[@ohos.file.picker](js-apis-file-picker.md)相应接口替代。
## 导入模块 ## 导入模块
```js ```js
...@@ -130,18 +133,13 @@ async function example() { ...@@ -130,18 +133,13 @@ async function example() {
console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName); console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName);
// 调用 getNextObject 接口获取下一个资源,直到最后一个 // 调用 getNextObject 接口获取下一个资源,直到最后一个
for (let i = 1; i < count; i++) { for (let i = 1; i < count; i++) {
fetchFileResult.getNextObject((error, fileAsset) => { let fileAsset = await fetchFileResult.getNextObject();
if (fileAsset == undefined) {
console.error('get next object failed with error: ' + error);
return;
}
console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName); console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
})
} }
});
// 释放FetchFileResult实例并使其失效。无法调用其他方法 // 释放FetchFileResult实例并使其失效。无法调用其他方法
fetchFileResult.close(); fetchFileResult.close();
}); });
});
} }
``` ```
...@@ -198,18 +196,15 @@ async function example() { ...@@ -198,18 +196,15 @@ async function example() {
console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName); console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName);
// 调用 getNextObject 接口获取下一个资源,直到最后一个 // 调用 getNextObject 接口获取下一个资源,直到最后一个
for (let i = 1; i < count; i++) { for (let i = 1; i < count; i++) {
fetchFileResult.getNextObject().then((fileAsset) => { let fileAsset = await fetchFileResult.getNextObject();
console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName); console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
}).catch((error) => {
console.error('get next object failed with error: ' + error);
})
} }
// 释放FetchFileResult实例并使其失效。无法调用其他方法
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
// 调用getFirstObject接口失败 // 调用getFirstObject接口失败
console.error('get first object failed with error: ' + error); console.error('get first object failed with error: ' + error);
}); });
// 释放FetchFileResult实例并使其失效。无法调用其他方法
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
// 调用getFileAssets接口失败 // 调用getFileAssets接口失败
console.error('get file assets failed with error: ' + error); console.error('get file assets failed with error: ' + error);
...@@ -499,7 +494,7 @@ async function example() { ...@@ -499,7 +494,7 @@ async function example() {
### getAlbums<sup>7+</sup> ### getAlbums<sup>7+</sup>
getAlbums(options: MediaFetchOptions, callback: AsyncCallback<Array&lt;Album&gt;>): void getAlbums(options: MediaFetchOptions, callback: AsyncCallback&lt;Array&lt;Album&gt;&gt;): void
获取相册列表,使用callback 方式返回结果。 获取相册列表,使用callback 方式返回结果。
...@@ -534,7 +529,7 @@ async function example() { ...@@ -534,7 +529,7 @@ async function example() {
### getAlbums<sup>7+</sup> ### getAlbums<sup>7+</sup>
getAlbums(options: MediaFetchOptions): Promise<Array&lt;Album&gt;> getAlbums(options: MediaFetchOptions): Promise&lt;Array&lt;Album&gt;&gt;
获取相册列表,使用 promise 方式返回结果。 获取相册列表,使用 promise 方式返回结果。
...@@ -614,13 +609,13 @@ release(): Promise&lt;void&gt; ...@@ -614,13 +609,13 @@ release(): Promise&lt;void&gt;
media.release() media.release()
``` ```
### storeMediaAsset<sup>(deprecated)</sup> ### storeMediaAsset
storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback&lt;string&gt;): void storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback&lt;string&gt;): void
保存媒体资源,以异步方法获取保存成功的URI,使用callback形式返回结果。 保存媒体资源,以异步方法获取保存成功的URI,使用callback形式返回结果。
> **说明**: 从API Version 9开始废弃 > **说明**:此接口为API Version 6开始支持,只支持FA模型使用
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -650,13 +645,13 @@ mediaLibrary.getMediaLibrary().storeMediaAsset(option, (error, value) => { ...@@ -650,13 +645,13 @@ mediaLibrary.getMediaLibrary().storeMediaAsset(option, (error, value) => {
``` ```
### storeMediaAsset<sup>(deprecated)</sup> ### storeMediaAsset
storeMediaAsset(option: MediaAssetOption): Promise&lt;string&gt; storeMediaAsset(option: MediaAssetOption): Promise&lt;string&gt;
保存媒体资源,以异步方法获取保存成功的URI,使用Promise形式返回结果。 保存媒体资源,以异步方法获取保存成功的URI,使用Promise形式返回结果。
> **说明**: 从API Version 9开始废弃 > **说明**:此接口为API Version 6开始支持,只支持FA模型使用
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -689,13 +684,15 @@ mediaLibrary.getMediaLibrary().storeMediaAsset(option).then((value) => { ...@@ -689,13 +684,15 @@ mediaLibrary.getMediaLibrary().storeMediaAsset(option).then((value) => {
``` ```
### startImagePreview<sup>(deprecated)</sup> ### startImagePreview
startImagePreview(images: Array&lt;string&gt;, index: number, callback: AsyncCallback&lt;void&gt;): void startImagePreview(images: Array&lt;string&gt;, index: number, callback: AsyncCallback&lt;void&gt;): void
启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。 启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。
> **说明**: <br/>从API Version 9开始废弃。建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。 > **说明**:
> 此接口为API Version 6开始支持,只支持FA模型使用。
> 建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -731,13 +728,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, index, (error) => { ...@@ -731,13 +728,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, index, (error) => {
``` ```
### startImagePreview<sup>(deprecated)</sup> ### startImagePreview
startImagePreview(images: Array&lt;string&gt;, callback: AsyncCallback&lt;void&gt;): void startImagePreview(images: Array&lt;string&gt;, callback: AsyncCallback&lt;void&gt;): void
启动图片预览界面,可以预览列表中首张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。 启动图片预览界面,可以预览列表中首张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。
> **说明**: <br/>从API Version 9开始废弃。建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。 > **说明**:
> 此接口为API Version 6开始支持,只支持FA模型使用。
> 建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -771,13 +770,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, (error) => { ...@@ -771,13 +770,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, (error) => {
``` ```
### startImagePreview<sup>(deprecated)</sup> ### startImagePreview
startImagePreview(images: Array&lt;string&gt;, index?: number): Promise&lt;void&gt; startImagePreview(images: Array&lt;string&gt;, index?: number): Promise&lt;void&gt;
启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用Promise方式进行异步回调。 启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用Promise方式进行异步回调。
> **说明**: <br/>从API Version 9开始废弃。建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。 > **说明**:
> 此接口为API Version 6开始支持,只支持FA模型使用。
> 建议使用[Image组件](../arkui-ts/ts-basic-components-image.md)替代。<br/>Image组件,可用于本地图片和网络图片的渲染展示。
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -816,13 +817,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, index).then(() => { ...@@ -816,13 +817,15 @@ mediaLibrary.getMediaLibrary().startImagePreview(images, index).then(() => {
``` ```
### startMediaSelect<sup>(deprecated)</sup> ### startMediaSelect
startMediaSelect(option: MediaSelectOption, callback: AsyncCallback&lt;Array&lt;string&gt;&gt;): void startMediaSelect(option: MediaSelectOption, callback: AsyncCallback&lt;Array&lt;string&gt;&gt;): void
启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用callback形式返回结果。 启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用callback形式返回结果。
> **说明**: <br/>从API Version 9开始废弃。建议使用系统应用图库替代。图库是系统内置的可视资源访问应用,提供图片和视频的管理、浏览等功能,使用方法请参考[OpenHarmony/applications_photos](https://gitee.com/openharmony/applications_photos#4-%E5%85%B8%E5%9E%8B%E6%8E%A5%E5%8F%A3%E7%9A%84%E4%BD%BF%E7%94%A8)。 > **说明**:
> 此接口为API Version 6开始支持,只支持FA模型使用。
> 建议使用系统应用图库替代。图库是系统内置的可视资源访问应用,提供图片和视频的管理、浏览等功能,使用方法请参考[OpenHarmony/applications_photos](https://gitee.com/openharmony/applications_photos#4-%E5%85%B8%E5%9E%8B%E6%8E%A5%E5%8F%A3%E7%9A%84%E4%BD%BF%E7%94%A8)。
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -830,7 +833,7 @@ startMediaSelect(option: MediaSelectOption, callback: AsyncCallback&lt;Array&lt; ...@@ -830,7 +833,7 @@ startMediaSelect(option: MediaSelectOption, callback: AsyncCallback&lt;Array&lt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| -------- | ---------------------------------------- | ---- | ------------------------------------ | | -------- | ---------------------------------------- | ---- | ------------------------------------ |
| option | [MediaSelectOption](#mediaselectoptiondeprecated) | 是 | 媒体选择选项。 | | option | [MediaSelectOption](#mediaselectoption) | 是 | 媒体选择选项。 |
| callback | AsyncCallback&lt;Array&lt;string&gt;&gt; | 是 | 媒体选择回调,返回选择的媒体URI(datashare://)列表。 | | callback | AsyncCallback&lt;Array&lt;string&gt;&gt; | 是 | 媒体选择回调,返回选择的媒体URI(datashare://)列表。 |
**示例:** **示例:**
...@@ -851,13 +854,15 @@ mediaLibrary.getMediaLibrary().startMediaSelect(option, (error, value) => { ...@@ -851,13 +854,15 @@ mediaLibrary.getMediaLibrary().startMediaSelect(option, (error, value) => {
``` ```
### startMediaSelect<sup>(deprecated)</sup> ### startMediaSelect
startMediaSelect(option: MediaSelectOption): Promise&lt;Array&lt;string&gt;&gt; startMediaSelect(option: MediaSelectOption): Promise&lt;Array&lt;string&gt;&gt;
启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用Promise形式返回结果。 启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用Promise形式返回结果。
> **说明**: <br/>从API Version 9开始废弃。建议使用系统应用图库替代。图库是系统内置的可视资源访问应用,提供图片和视频的管理、浏览等功能,使用方法请参考[OpenHarmony/applications_photos](https://gitee.com/openharmony/applications_photos#4-%E5%85%B8%E5%9E%8B%E6%8E%A5%E5%8F%A3%E7%9A%84%E4%BD%BF%E7%94%A8)。 > **说明**:
> 此接口为API Version 6开始支持,只支持FA模型使用。
> 建议使用系统应用图库替代。图库是系统内置的可视资源访问应用,提供图片和视频的管理、浏览等功能,使用方法请参考[OpenHarmony/applications_photos](https://gitee.com/openharmony/applications_photos#4-%E5%85%B8%E5%9E%8B%E6%8E%A5%E5%8F%A3%E7%9A%84%E4%BD%BF%E7%94%A8)。
**系统能力**:SystemCapability.Multimedia.MediaLibrary.Core **系统能力**:SystemCapability.Multimedia.MediaLibrary.Core
...@@ -865,7 +870,7 @@ startMediaSelect(option: MediaSelectOption): Promise&lt;Array&lt;string&gt;&gt; ...@@ -865,7 +870,7 @@ startMediaSelect(option: MediaSelectOption): Promise&lt;Array&lt;string&gt;&gt;
| 参数名 | 类型 | 必填 | 说明 | | 参数名 | 类型 | 必填 | 说明 |
| ------ | --------------------------------------- | ---- | ------- | | ------ | --------------------------------------- | ---- | ------- |
| option | [MediaSelectOption](#mediaselectoptiondeprecated) | 是 | 媒体选择选项。 | | option | [MediaSelectOption](#mediaselectoption) | 是 | 媒体选择选项。 |
**返回值:** **返回值:**
...@@ -1907,9 +1912,9 @@ async function example() { ...@@ -1907,9 +1912,9 @@ async function example() {
if(i == fetchCount - 1) { if(i == fetchCount - 1) {
var result = fetchFileResult.isAfterLast(); var result = fetchFileResult.isAfterLast();
console.info('mediaLibrary fileAsset isAfterLast result: ' + result); console.info('mediaLibrary fileAsset isAfterLast result: ' + result);
fetchFileResult.close();
} }
} }
fetchFileResult.close();
} }
``` ```
...@@ -1969,8 +1974,8 @@ async function example() { ...@@ -1969,8 +1974,8 @@ async function example() {
return; return;
} }
console.info('getFirstObject successfully, displayName : ' + fileAsset.displayName); console.info('getFirstObject successfully, displayName : ' + fileAsset.displayName);
})
fetchFileResult.close(); fetchFileResult.close();
})
} }
``` ```
...@@ -2002,10 +2007,10 @@ async function example() { ...@@ -2002,10 +2007,10 @@ async function example() {
let fetchFileResult = await media.getFileAssets(getImageOp); let fetchFileResult = await media.getFileAssets(getImageOp);
fetchFileResult.getFirstObject().then((fileAsset) => { fetchFileResult.getFirstObject().then((fileAsset) => {
console.info('getFirstObject successfully, displayName: ' + fileAsset.displayName); console.info('getFirstObject successfully, displayName: ' + fileAsset.displayName);
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('getFirstObject failed with error: ' + error); console.error('getFirstObject failed with error: ' + error);
}); });
fetchFileResult.close();
} }
``` ```
...@@ -2038,16 +2043,16 @@ async function example() { ...@@ -2038,16 +2043,16 @@ async function example() {
}; };
let fetchFileResult = await media.getFileAssets(getImageOp); let fetchFileResult = await media.getFileAssets(getImageOp);
let fileAsset = await fetchFileResult.getFirstObject(); let fileAsset = await fetchFileResult.getFirstObject();
if (fetchFileResult.isAfterLast) { if (!fileAsset.isAfterLast) {
fetchFileResult.getNextObject((error, fileAsset) => { fetchFileResult.getNextObject((error, fileAsset) => {
if (error) { if (error) {
console.error('fetchFileResult getNextObject failed with error: ' + error); console.error('fetchFileResult getNextObject failed with error: ' + error);
return; return;
} }
console.log('fetchFileResult getNextObject successfully, displayName: ' + fileAsset.displayName); console.log('fetchFileResult getNextObject successfully, displayName: ' + fileAsset.displayName);
fetchFileResult.close();
}) })
} }
fetchFileResult.close();
} }
``` ```
...@@ -2081,14 +2086,14 @@ async function example() { ...@@ -2081,14 +2086,14 @@ async function example() {
}; };
let fetchFileResult = await media.getFileAssets(getImageOp); let fetchFileResult = await media.getFileAssets(getImageOp);
let fileAsset = await fetchFileResult.getFirstObject(); let fileAsset = await fetchFileResult.getFirstObject();
if (fetchFileResult.isAfterLast) { if (!fileAsset.isAfterLast) {
fetchFileResult.getNextObject().then((fileAsset) => { fetchFileResult.getNextObject().then((fileAsset) => {
console.info('fetchFileResult getNextObject successfully, displayName: ' + fileAsset.displayName); console.info('fetchFileResult getNextObject successfully, displayName: ' + fileAsset.displayName);
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('fetchFileResult getNextObject failed with error: ' + error); console.error('fetchFileResult getNextObject failed with error: ' + error);
}) })
} }
fetchFileResult.close();
} }
``` ```
...@@ -2124,8 +2129,8 @@ async function example() { ...@@ -2124,8 +2129,8 @@ async function example() {
return; return;
} }
console.info('getLastObject successfully, displayName: ' + fileAsset.displayName); console.info('getLastObject successfully, displayName: ' + fileAsset.displayName);
})
fetchFileResult.close(); fetchFileResult.close();
})
} }
``` ```
...@@ -2157,10 +2162,10 @@ async function example() { ...@@ -2157,10 +2162,10 @@ async function example() {
let fetchFileResult = await media.getFileAssets(getImageOp); let fetchFileResult = await media.getFileAssets(getImageOp);
fetchFileResult.getLastObject().then((fileAsset) => { fetchFileResult.getLastObject().then((fileAsset) => {
console.info('getLastObject successfully, displayName: ' + fileAsset.displayName); console.info('getLastObject successfully, displayName: ' + fileAsset.displayName);
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('getLastObject failed with error: ' + error); console.error('getLastObject failed with error: ' + error);
}); });
fetchFileResult.close();
} }
``` ```
...@@ -2197,8 +2202,8 @@ async function example() { ...@@ -2197,8 +2202,8 @@ async function example() {
return; return;
} }
console.info('getPositionObject successfully, displayName: ' + fileAsset.displayName); console.info('getPositionObject successfully, displayName: ' + fileAsset.displayName);
})
fetchFileResult.close(); fetchFileResult.close();
})
} }
``` ```
...@@ -2236,10 +2241,10 @@ async function example() { ...@@ -2236,10 +2241,10 @@ async function example() {
let fetchFileResult = await media.getFileAssets(getImageOp); let fetchFileResult = await media.getFileAssets(getImageOp);
fetchFileResult.getPositionObject(0).then((fileAsset) => { fetchFileResult.getPositionObject(0).then((fileAsset) => {
console.info('getPositionObject successfully, displayName: ' + fileAsset.displayName); console.info('getPositionObject successfully, displayName: ' + fileAsset.displayName);
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('getPositionObject failed with error: ' + error); console.error('getPositionObject failed with error: ' + error);
}); });
fetchFileResult.close();
} }
``` ```
...@@ -2277,8 +2282,8 @@ async function example() { ...@@ -2277,8 +2282,8 @@ async function example() {
for (let i = 0; i < fetchFileResult.getCount(); i++) { for (let i = 0; i < fetchFileResult.getCount(); i++) {
console.info('getAllObject fileAssetList ' + i + ' displayName: ' + fileAssetList[i].displayName); console.info('getAllObject fileAssetList ' + i + ' displayName: ' + fileAssetList[i].displayName);
} }
})
fetchFileResult.close(); fetchFileResult.close();
})
} }
``` ```
...@@ -2312,10 +2317,10 @@ async function example() { ...@@ -2312,10 +2317,10 @@ async function example() {
for (let i = 0; i < fetchFileResult.getCount(); i++) { for (let i = 0; i < fetchFileResult.getCount(); i++) {
console.info('getAllObject fileAssetList ' + i + ' displayName: ' + fileAssetList[i].displayName); console.info('getAllObject fileAssetList ' + i + ' displayName: ' + fileAssetList[i].displayName);
} }
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('getAllObject failed with error: ' + error); console.error('getAllObject failed with error: ' + error);
}); });
fetchFileResult.close();
} }
``` ```
...@@ -2447,10 +2452,10 @@ async function example() { ...@@ -2447,10 +2452,10 @@ async function example() {
console.error('album getFileAssets failed with error: ' + error); console.error('album getFileAssets failed with error: ' + error);
return; return;
} }
let count = fetchFileResult.getcount(); let count = fetchFileResult.getCount();
console.info('album getFileAssets successfully, count: ' + count); console.info('album getFileAssets successfully, count: ' + count);
});
fetchFileResult.close(); fetchFileResult.close();
});
} }
``` ```
...@@ -2492,13 +2497,13 @@ async function example() { ...@@ -2492,13 +2497,13 @@ async function example() {
const albumList = await media.getAlbums(AlbumNoArgsfetchOp); const albumList = await media.getAlbums(AlbumNoArgsfetchOp);
const album = albumList[0]; const album = albumList[0];
// 取到相册列表中的一个相册,获取此相册中所有符合媒体检索选项的媒体资源 // 取到相册列表中的一个相册,获取此相册中所有符合媒体检索选项的媒体资源
album.getFileAssets(fileNoArgsfetchOp).then((albumFetchFileResult) => { album.getFileAssets(fileNoArgsfetchOp).then((fetchFileResult) => {
let count = fetchFileResult.getcount(); let count = fetchFileResult.getCount();
console.info('album getFileAssets successfully, count: ' + count); console.info('album getFileAssets successfully, count: ' + count);
fetchFileResult.close();
}).catch((error) => { }).catch((error) => {
console.error('album getFileAssets failed with error: ' + error); console.error('album getFileAssets failed with error: ' + error);
}); });
fetchFileResult.close();
} }
``` ```
...@@ -2622,12 +2627,10 @@ async function example() { ...@@ -2622,12 +2627,10 @@ async function example() {
| width | number | 是 | 是 | 宽(单位:像素) | | width | number | 是 | 是 | 宽(单位:像素) |
| height | number | 是 | 是 | 高(单位:像素) | | height | number | 是 | 是 | 高(单位:像素) |
## MediaAssetOption<sup>(deprecated)</sup> ## MediaAssetOption
媒体资源选项。 媒体资源选项。
> **说明**: 从API Version 9开始废弃。
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.MediaLibrary.Core **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.MediaLibrary.Core
...@@ -2637,16 +2640,14 @@ async function example() { ...@@ -2637,16 +2640,14 @@ async function example() {
| mimeType | string | 是 | 是 | 媒体MIME(Multipurpose&nbsp;Internet&nbsp;Mail&nbsp;Extensions)类型。<br/>包括:'image/\*'、'video/\*'、'audio/\*'、 'file\*'。 | | mimeType | string | 是 | 是 | 媒体MIME(Multipurpose&nbsp;Internet&nbsp;Mail&nbsp;Extensions)类型。<br/>包括:'image/\*'、'video/\*'、'audio/\*'、 'file\*'。 |
| relativePath | string | 是 | 是 | 自定义媒体资源保存位置,例:Pictures/ 不填则保存到默认路径。 <br/> image类型默认路径Pictures/ <br/> video类型默认路径Videos/ <br/> audio类型默认路径Audios/ <br/> file类型默认路径Documents/ 。 | | relativePath | string | 是 | 是 | 自定义媒体资源保存位置,例:Pictures/ 不填则保存到默认路径。 <br/> image类型默认路径Pictures/ <br/> video类型默认路径Videos/ <br/> audio类型默认路径Audios/ <br/> file类型默认路径Documents/ 。 |
## MediaSelectOption<sup>(deprecated)</sup> ## MediaSelectOption
媒体资源类型选项。 媒体资源类型选项。
> **说明**: 从API Version 9开始废弃。
**系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.MediaLibrary.Core **系统能力:** 以下各项对应的系统能力均为SystemCapability.Multimedia.MediaLibrary.Core
| 名称 | 类型 | 可读 | 可写 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| ----- | ------ | ---- | ---- | -------------------- | | ----- | ------ | ---- | ---- | -------------------- |
| type | 'image' &#124; 'video' &#124; 'media' | 是 | 是 | 媒体类型,包括:image, video, media,当前仅支持media类型 | | type | 'image' &#124; 'video' &#124; 'media' | 是 | 是 | 媒体类型,包括:image, video, media,当前仅支持media类型 |
| count | number | 是 | 是 | 媒体选择,count = 1表示单选,count大于1表示多选。 | | count | number | 是 | 是 | 可以选择媒体数量的最大值,count = 1表示单选,count大于1表示多选。 |
...@@ -853,8 +853,8 @@ function unsubscribeCallback(err) { ...@@ -853,8 +853,8 @@ function unsubscribeCallback(err) {
console.info("unsubscribe success"); console.info("unsubscribe success");
} }
} }
function onDisconnectCallback(data) { function onDisconnectCallback() {
console.info("Cancel callback: " + JSON.stringify(data)); console.info("subscribe disconnect");
} }
let subscriber = { let subscriber = {
onDisconnect: onDisconnectCallback onDisconnect: onDisconnectCallback
...@@ -883,8 +883,8 @@ unsubscribe(subscriber: NotificationSubscriber): Promise\<void\> ...@@ -883,8 +883,8 @@ unsubscribe(subscriber: NotificationSubscriber): Promise\<void\>
**示例:** **示例:**
```js ```js
function onDisconnectCallback(data) { function onDisconnectCallback() {
console.info("Cancel callback: " + JSON.stringify(data)); console.info("subscribe disconnect");
} }
let subscriber = { let subscriber = {
onDisconnect: onDisconnectCallback onDisconnect: onDisconnectCallback
......
此差异已折叠。
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
| 名称 | 类型 | 可读 | 可写 | 说明 | | 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- | | -------- | -------- | -------- | -------- | -------- |
| permissions | Array&lt;string&gt; | 是 | 否 | 用户传入的权限。| | permissions | Array&lt;string&gt; | 是 | 否 | 用户传入的权限。|
| authResults | Array&lt;number&gt; | 是 | 否 | 相应请求权限的结果:<br>-1表示权限已设置,无需弹窗,需要用户在"设置"中修改。<br>0表示无需任何操作。<br>1表示需要动态弹窗授权。<br>2表示请求无效,可能原因有:<br>-未在设置文件中声明目标权限;<br>-权限名非法;<br>-部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件,见[ohos.permission.LOCATION](../../security/permission-list.md#ohospermissionlocation)[ohos.permission.APPROXIMATELY_LOCATION](../../security/permission-list.md#ohospermissionapproximately_location)| | authResults | Array&lt;number&gt; | 是 | 否 | 相应请求权限的结果:<br>- -1:未授权,表示权限已设置,无需弹窗,需要用户在"设置"中修改。<br>- 0:已授权。<br>- 2:未授权,表示请求无效,可能原因有:<br> -未在设置文件中声明目标权限。<br> -权限名非法。<br> -部分权限存在特殊申请条件,在申请对应权限时未满足其指定的条件,见[ohos.permission.LOCATION](../../security/permission-list.md#ohospermissionlocation)[ohos.permission.APPROXIMATELY_LOCATION](../../security/permission-list.md#ohospermissionapproximately_location) |
## 使用说明 ## 使用说明
......
...@@ -362,7 +362,7 @@ replaceUrl(options: RouterOptions, mode: RouterMode, callback: AsyncCallback&lt; ...@@ -362,7 +362,7 @@ replaceUrl(options: RouterOptions, mode: RouterMode, callback: AsyncCallback&lt;
| 错误码ID | 错误信息 | | 错误码ID | 错误信息 |
| --------- | ------- | | --------- | ------- |
| 100001 | if UI execution context not found, only throw in standard system. | | 100001 | if can not get the delegate, only throw in standard system. |
| 200002 | if the uri is not exist. | | 200002 | if the uri is not exist. |
**示例:** **示例:**
...@@ -597,7 +597,7 @@ export default { ...@@ -597,7 +597,7 @@ export default {
// 在detail页面中 // 在detail页面中
export default { export default {
onInit() { onInit() {
console.info('showData1:' + router.getParams()[data1]); console.info('showData1:' + router.getParams()['data1']);
} }
} }
``` ```
......
...@@ -199,7 +199,7 @@ export default { ...@@ -199,7 +199,7 @@ export default {
## ScreenOnVisible<sup>(deprecated)</sup> ## ScreenOnVisible<sup>(deprecated)</sup>
screenOnVisible(options?: ScreenOnVisibleOptions) screenOnVisible(options?: ScreenOnVisibleOptions):&nbsp;void
定义屏幕唤醒时是否保持应用可见。 定义屏幕唤醒时是否保持应用可见。
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册