提交 b8f9aec0 编写于 作者: W wuzhihuitmac

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

Change-Id: I56fc83de30e5a7696be3b3a826c939129df123df
...@@ -10,7 +10,7 @@ The current Linux kernel baseline evolves based on the Linux LTS version 4.19 an ...@@ -10,7 +10,7 @@ The current Linux kernel baseline evolves based on the Linux LTS version 4.19 an
### Bootloader<a name="section19062510518"></a> ### Bootloader<a name="section19062510518"></a>
You can use the Bootloader provided by the chipset vendor or open-source U-Boot to load the kernel image. For example, you can use [U-Boot](https://gitee.com/openharmony/device_hisilicon_third_party_uboot) for the Hi3516D V300 development board. You can use the Bootloader provided by the chipset vendor or open-source U-Boot to load the kernel image. For example, you can use [U-Boot](https://gitee.com/openharmony/third_party_u-boot) for the Hi3516D V300 development board.
## Adaptation, Building, Burning, and Startup<a name="section11112101695215"></a> ## Adaptation, Building, Burning, and Startup<a name="section11112101695215"></a>
...@@ -60,7 +60,7 @@ Based on the preceding process, the recommended verification procedure is as fol ...@@ -60,7 +60,7 @@ Based on the preceding process, the recommended verification procedure is as fol
1. Create a root file system image. 1. Create a root file system image.
Create a root file system image **rootfs.img** by following instructions in [Adding a Chipset Solution and a Product Solution](../subsystems/subsys-build-mini-lite.md). As shown in the preceding figure, the startup process is closely related to the product configuration. You need to complete the following configuration when creating **rootfs.img**: Create a root file system image **rootfs.img** by following instructions in [Adding a Chipset Solution and a Product Solution](../subsystems/subsys-build-all.md). As shown in the preceding figure, the startup process is closely related to the product configuration. You need to complete the following configuration when creating **rootfs.img**:
- Component configuration - Component configuration
......
...@@ -14,7 +14,7 @@ Stage模型的设计,主要是为了开发者更加方便地开发出分布式 ...@@ -14,7 +14,7 @@ Stage模型的设计,主要是为了开发者更加方便地开发出分布式
| 开发方式 | 提供类Web的API,UI开发与Stage模型一致。 | 提供面向对象的开发方式,UI开发与FA模型一致。 | | 开发方式 | 提供类Web的API,UI开发与Stage模型一致。 | 提供面向对象的开发方式,UI开发与FA模型一致。 |
| 引擎实例 | 每个进程内的每个Ability实例独享一个JS VM引擎实例。 | 每个进程内的多个Ability实例共享一个JS VM引擎实例。 | | 引擎实例 | 每个进程内的每个Ability实例独享一个JS VM引擎实例。 | 每个进程内的多个Ability实例共享一个JS VM引擎实例。 |
| 进程内对象共享 | 不支持。 | 支持。 | | 进程内对象共享 | 不支持。 | 支持。 |
| 包描述文件 | 使用config.json描述HAP包和组件信息,组件必须使用固定的文件名。 | 使用module.json描述HAP包和组件信息,可以指定入口文件名。 | | 包描述文件 | 使用config.json描述HAP包和组件信息,组件必须使用固定的文件名。 | 使用module.json5描述HAP包和组件信息,可以指定入口文件名。 |
| 组件 | 提供PageAbility(页面展示),ServiceAbility(服务),DataAbility(数据分享)以及FormAbility(卡片)。 | 提供Ability(页面展示)、Extension(基于场景的服务扩展)。 | | 组件 | 提供PageAbility(页面展示),ServiceAbility(服务),DataAbility(数据分享)以及FormAbility(卡片)。 | 提供Ability(页面展示)、Extension(基于场景的服务扩展)。 |
除了上述设计上的差异外,对于开发者而言,两种模型的主要区别在于: 除了上述设计上的差异外,对于开发者而言,两种模型的主要区别在于:
......
# Ability开发指导 # Ability开发指导
## 场景介绍 ## 场景介绍
Stage模型是区别于FA模型的一种应用开发模型,对此模型的介绍详见[Stage模型综述](stage-brief.md)。开发Stage模型应用时,需要在module.json和app.json配置文件中对应用的包结构进行声明,对应用包结构配置文件的说明详见[应用包结构配置文件的说明](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/stage-structure.md)。基于Stage模型的Ability应用开发,主要涉及如下功能逻辑: Stage模型是区别于FA模型的一种应用开发模型,对此模型的介绍详见[Stage模型综述](stage-brief.md)。开发Stage模型应用时,需要在module.json5和app.json5配置文件中对应用的包结构进行声明,对应用包结构配置文件的说明详见[应用包结构配置文件的说明](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/stage-structure.md)。基于Stage模型的Ability应用开发,主要涉及如下功能逻辑:
- 创建支持使用屏幕浏览及人机交互的Ability应用,包括实现Ability的生命周期、获取Ability配置信息、向用户申请授权及环境变化通知等场景。 - 创建支持使用屏幕浏览及人机交互的Ability应用,包括实现Ability的生命周期、获取Ability配置信息、向用户申请授权及环境变化通知等场景。
- 启动Ability应用,包括相同设备启动Ability、跨设备启动Ability以及指定页面启动Ability等场景。 - 启动Ability应用,包括相同设备启动Ability、跨设备启动Ability以及指定页面启动Ability等场景。
- 通用组件Call功能,详见[Call调用开发指导](stage-call.md) - 通用组件Call功能,详见[Call调用开发指导](stage-call.md)
...@@ -8,7 +8,7 @@ Stage模型是区别于FA模型的一种应用开发模型,对此模型的介 ...@@ -8,7 +8,7 @@ Stage模型是区别于FA模型的一种应用开发模型,对此模型的介
- 应用迁移,详见[应用迁移开发指导](stage-ability-continuation.md) - 应用迁移,详见[应用迁移开发指导](stage-ability-continuation.md)
### 启动模式 ### 启动模式
Ability支持单实例、多实例和指定实例3种启动模式,在module.json中通过launchType配置。启动模式对应Ability被启动时的行为,对启动模式的详细说明如下: Ability支持单实例、多实例和指定实例3种启动模式,在module.json5中通过launchType配置。启动模式对应Ability被启动时的行为,对启动模式的详细说明如下:
| 启动模式 | 描述 |说明 | | 启动模式 | 描述 |说明 |
| ----------- | ------- |---------------- | | ----------- | ------- |---------------- |
...@@ -16,7 +16,7 @@ Ability支持单实例、多实例和指定实例3种启动模式,在module.js ...@@ -16,7 +16,7 @@ Ability支持单实例、多实例和指定实例3种启动模式,在module.js
| singleton | 单实例 | 系统中只存在唯一一个实例,startAbility时,如果已存在,则复用系统中的唯一一个实例 | | singleton | 单实例 | 系统中只存在唯一一个实例,startAbility时,如果已存在,则复用系统中的唯一一个实例 |
| specified | 指定实例 | 运行时由Ability内部业务决定是否创建多实例 | | specified | 指定实例 | 运行时由Ability内部业务决定是否创建多实例 |
缺省情况下是singleton模式,module.json示例如下: 缺省情况下是singleton模式,module.json5示例如下:
```json ```json
{ {
"module": { "module": {
...@@ -149,9 +149,9 @@ export default class MainAbility extends Ability { ...@@ -149,9 +149,9 @@ export default class MainAbility extends Ability {
} }
``` ```
### 应用向用户申请授权 ### 应用向用户申请授权
应用需要获取用户的隐私信息或使用系统能力时,比如获取位置信息、使用相机拍摄照片或录制视频等,需要向用户申请授权。在开发过程中,首先需要明确涉及的敏感权限并在module.json中声明需要的权限,同时通过接口`requestPermissionsFromUser`以动态弹窗的方式向用户申请授权。以访问日历为例,具体示例代码如下: 应用需要获取用户的隐私信息或使用系统能力时,比如获取位置信息、使用相机拍摄照片或录制视频等,需要向用户申请授权。在开发过程中,首先需要明确涉及的敏感权限并在module.json5中声明需要的权限,同时通过接口`requestPermissionsFromUser`以动态弹窗的方式向用户申请授权。以访问日历为例,具体示例代码如下:
在module.json声明需要的权限: 在module.json5声明需要的权限:
```json ```json
"requestPermissions": [ "requestPermissions": [
{ {
......
...@@ -24,7 +24,7 @@ OpenHarmony当前不支持三方应用创建ServiceExtensionAbility。 ...@@ -24,7 +24,7 @@ OpenHarmony当前不支持三方应用创建ServiceExtensionAbility。
## 开发步骤 ## 开发步骤
1. 需要在应用配置文件module.json中进行注册,注册类型type需要设置为service。module.json配置样例如下所示: 1. 需要在应用配置文件module.json5中进行注册,注册类型type需要设置为service。module.json5配置样例如下所示:
```json ```json
......
...@@ -42,7 +42,7 @@ module.exports = { ...@@ -42,7 +42,7 @@ module.exports = {
``` ```
// hellp.cpp 读取 // hello.cpp 读取
#define _NWEBEX_VERSION(v) #v #define _NWEBEX_VERSION(v) #v
#define _NWEBEX_VER2STR(v) _NWEBEX_VERSION(v) #define _NWEBEX_VER2STR(v) _NWEBEX_VERSION(v)
......
...@@ -73,6 +73,9 @@ import Want from '@ohos.application.Want'; ...@@ -73,6 +73,9 @@ import Want from '@ohos.application.Want';
- 传递RemoteObject数据 - 传递RemoteObject数据
``` js ``` js
import rpc from '@ohos.rpc';
import Ability from '@ohos.application.Ability'
class Stub extends rpc.RemoteObject { class Stub extends rpc.RemoteObject {
constructor(des) { constructor(des) {
if (typeof des == 'string') { if (typeof des == 'string') {
...@@ -103,15 +106,17 @@ import Want from '@ohos.application.Want'; ...@@ -103,15 +106,17 @@ import Want from '@ohos.application.Want';
"deviceId": "", // deviceId为空表示本设备 "deviceId": "", // deviceId为空表示本设备
"bundleName": "com.extreme.test", "bundleName": "com.extreme.test",
"abilityName": "MainAbility", "abilityName": "MainAbility",
"moduleName": "entry" // moduleName非必选 "moduleName": "entry", // moduleName非必选
"parameters": { "parameters": {
"keyRemoteObject":{"type":"RemoteObject", "value":remoteObject} "keyRemoteObject":{"type":"RemoteObject", "value":remoteObject}
} }
}; };
this.context.startAbility(want, (error) => { this.context.startAbility(want, (error) => {
// 显式拉起Ability,通过bundleName、abilityName和moduleName可以唯一确定一个Ability // 显式拉起Ability,通过bundleName、abilityName和moduleName可以唯一确定一个Ability
console.log("error.code = " + error.code) console.log("error.code = " + error.code)
}) })
``` ```
<!--no_check--> <!--no_check-->
......
...@@ -112,33 +112,37 @@ register(options?: ContinuationExtraParams): Promise\<number>; ...@@ -112,33 +112,37 @@ register(options?: ContinuationExtraParams): Promise\<number>;
``` ```
## continuationManager.on("deviceConnect")<sup>(deprecated)</sup> ## continuationManager.on("deviceConnect")<sup>(deprecated)</sup>
> 从API Version 9开始不再维护,建议使用[on](#continuationmanagerondeviceconnect)替代。
on(type: "deviceConnect", callback: Callback\<ContinuationResult>): void; on(type: "deviceConnect", callback: Callback\<ContinuationResult>): void;
异步方法,监听设备连接状态,使用Callback形式返回连接的设备信息。 异步方法,监听设备连接状态,使用Callback形式返回连接的设备信息。
> 从API Version 9开始不再维护,建议使用[on](#continuationmanagerondeviceconnect9)替代。
## continuationManager.on("deviceDisconnect")<sup>(deprecated)</sup> ## continuationManager.on("deviceDisconnect")<sup>(deprecated)</sup>
> 从API Version 9开始不再维护,建议使用[on](#continuationmanagerondevicedisconnect)替代。
on(type: "deviceDisconnect", callback: Callback\<string>): void; on(type: "deviceDisconnect", callback: Callback\<string>): void;
异步方法,监听设备断开状态,使用Callback形式返回断开的设备信息。 异步方法,监听设备断开状态,使用Callback形式返回断开的设备信息。
> 从API Version 9开始不再维护,建议使用[on](#continuationmanagerondevicedisconnect9)替代。
## continuationManager.off("deviceConnect")<sup>(deprecated)</sup> ## continuationManager.off("deviceConnect")<sup>(deprecated)</sup>
> 从API Version 9开始不再维护,建议使用[off](#continuationmanageroffdeviceconnect)替代。
off(type: "deviceConnect", callback?: Callback\<ContinuationResult>): void; off(type: "deviceConnect", callback?: Callback\<ContinuationResult>): void;
异步方法,取消监听设备连接状态,使用Callback形式返回连接的设备信息。 异步方法,取消监听设备连接状态,使用Callback形式返回连接的设备信息。
> 从API Version 9开始不再维护,建议使用[off](#continuationmanageroffdeviceconnect9)替代。
## continuationManager.off("deviceDisconnect")<sup>(deprecated)</sup> ## continuationManager.off("deviceDisconnect")<sup>(deprecated)</sup>
> 从API Version 9开始不再维护,建议使用[off](#continuationmanageroffdevicedisconnect)替代。
off(type: "deviceDisconnect", callback?: Callback\<string>): void; off(type: "deviceDisconnect", callback?: Callback\<string>): void;
异步方法,取消监听设备断开状态,使用Callback形式返回连接的设备信息。 异步方法,取消监听设备断开状态,使用Callback形式返回连接的设备信息。
> 从API Version 9开始不再维护,建议使用[off](#continuationmanageroffdevicedisconnect9)替代。
## continuationManager.on("deviceConnect")<sup>9+</sup> ## continuationManager.on("deviceConnect")<sup>9+</sup>
on(type: "deviceConnect", token: number, callback: Callback\<Array\<ContinuationResult>>): void; on(type: "deviceConnect", token: number, callback: Callback\<Array\<ContinuationResult>>): void;
......
...@@ -382,7 +382,7 @@ let promise = preferences.put('startup', 'auto'); ...@@ -382,7 +382,7 @@ let promise = preferences.put('startup', 'auto');
promise.then(() => { promise.then(() => {
console.info("Succeeded in putting value of 'startup'."); console.info("Succeeded in putting value of 'startup'.");
}).catch((err) => { }).catch((err) => {
console.info("Failed to put value of 'startup'. Cause: " + err)); console.info("Failed to put value of 'startup'. Cause: " + err);
}) })
``` ```
......
...@@ -56,11 +56,11 @@ var context = featureAbility.getContext(); ...@@ -56,11 +56,11 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
let storage = data_storage.getStorageSync(path + '/mystore'); let storage = data_storage.getStorageSync(path + '/mystore');
storage.putSync('startup', 'auto'); storage.putSync('startup', 'auto');
storage.flushSync(); storage.flushSync();
});
``` ```
...@@ -89,16 +89,16 @@ var context = featureAbility.getContext(); ...@@ -89,16 +89,16 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
data_storage.getStorage(path + '/mystore', function (err, storage) { data_storage.getStorage(path + '/mystore', function (err, storage) {
if (err) { if (err) {
console.info("Failed to get the storage. path: " + path + '/mystore'); console.info("Failed to get the storage. path: " + path + '/mystore');
return; return;
} }
storage.putSync('startup', 'auto'); storage.putSync('startup', 'auto');
storage.flushSync(); storage.flushSync();
}) })
});
``` ```
...@@ -132,15 +132,15 @@ var context = featureAbility.getContext(); ...@@ -132,15 +132,15 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
let getPromise = data_storage.getStorage(path + '/mystore'); let getPromise = data_storage.getStorage(path + '/mystore');
getPromise.then((storage) => { getPromise.then((storage) => {
storage.putSync('startup', 'auto'); storage.putSync('startup', 'auto');
storage.flushSync(); storage.flushSync();
}).catch((err) => { }).catch((err) => {
console.info("Failed to get the storage. path: " + path + '/mystore'); console.info("Failed to get the storage. path: " + path + '/mystore');
}) })
});
``` ```
...@@ -168,12 +168,11 @@ var context = featureAbility.getContext(); ...@@ -168,12 +168,11 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
data_storage.deleteStorageSync(path + '/mystore'); data_storage.deleteStorageSync(path + '/mystore');
});
``` ```
## data_storage.deleteStorage ## data_storage.deleteStorage
deleteStorage(path: string, callback: AsyncCallback&lt;void&gt;): void deleteStorage(path: string, callback: AsyncCallback&lt;void&gt;): void
...@@ -199,15 +198,15 @@ var context = featureAbility.getContext(); ...@@ -199,15 +198,15 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
data_storage.deleteStorage(path + '/mystore', function (err) { data_storage.deleteStorage(path + '/mystore', function (err) {
if (err) { if (err) {
console.info("Failed to delete the storage with err: " + err); console.info("Failed to delete the storage with err: " + err);
return; return;
} }
console.info("Succeeded in deleting the storage."); console.info("Succeeded in deleting the storage.");
}) })
});
``` ```
...@@ -241,14 +240,14 @@ var context = featureAbility.getContext(); ...@@ -241,14 +240,14 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
let promisedelSt = data_storage.deleteStorage(path + '/mystore'); let promisedelSt = data_storage.deleteStorage(path + '/mystore');
promisedelSt.then(() => { promisedelSt.then(() => {
console.info("Succeeded in deleting the storage."); console.info("Succeeded in deleting the storage.");
}).catch((err) => { }).catch((err) => {
console.info("Failed to delete the storage with err: " + err); console.info("Failed to delete the storage with err: " + err);
}) })
});
``` ```
...@@ -275,9 +274,9 @@ var context = featureAbility.getContext(); ...@@ -275,9 +274,9 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
data_storage.removeStorageFromCacheSync(path + '/mystore'); data_storage.removeStorageFromCacheSync(path + '/mystore');
});
``` ```
...@@ -306,15 +305,15 @@ var context = featureAbility.getContext(); ...@@ -306,15 +305,15 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
data_storage.removeStorageFromCache(path + '/mystore', function (err) { data_storage.removeStorageFromCache(path + '/mystore', function (err) {
if (err) { if (err) {
console.info("Failed to remove storage from cache with err: " + err); console.info("Failed to remove storage from cache with err: " + err);
return; return;
} }
console.info("Succeeded in removing storage from cache."); console.info("Succeeded in removing storage from cache.");
}) })
});
``` ```
...@@ -348,22 +347,20 @@ var context = featureAbility.getContext(); ...@@ -348,22 +347,20 @@ var context = featureAbility.getContext();
context.getFilesDir().then((filePath) => { context.getFilesDir().then((filePath) => {
path = filePath; path = filePath;
console.info("======================>getFilesDirPromsie====================>"); console.info("======================>getFilesDirPromsie====================>");
});
let promiserevSt = data_storage.removeStorageFromCache(path + '/mystore') let promiserevSt = data_storage.removeStorageFromCache(path + '/mystore')
promiserevSt.then(() => { promiserevSt.then(() => {
console.info("Succeeded in removing storage from cache."); console.info("Succeeded in removing storage from cache.");
}).catch((err) => { }).catch((err) => {
console.info("Failed to remove storage from cache with err: " + err); console.info("Failed to remove storage from cache with err: " + err);
}) })
});
``` ```
## Storage ## Storage
提供获取和修改存储数据的接口。 提供获取和修改存储数据的接口。
### getSync ### getSync
getSync(key: string, defValue: ValueType): ValueType getSync(key: string, defValue: ValueType): ValueType
......
...@@ -185,9 +185,9 @@ getAllDisplay(): Promise&lt;Array&lt;Display&gt;&gt; ...@@ -185,9 +185,9 @@ getAllDisplay(): Promise&lt;Array&lt;Display&gt;&gt;
```js ```js
let promise = display.getAllDisplay(); let promise = display.getAllDisplay();
promise.then((data) => { promise.then((data) => {
console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
}).catch((err) => {
console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data)); console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
}).catch((err) => {
console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
}); });
``` ```
...@@ -216,6 +216,16 @@ hasPrivateWindow(displayId: number): boolean ...@@ -216,6 +216,16 @@ hasPrivateWindow(displayId: number): boolean
**示例:** **示例:**
```js ```js
var displayClass = null;
display.getDefaultDisplay((err, data) => {
if (err.code) {
console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(err));
return;
}
console.info('Succeeded in obtaining the default display object. Data:' + JSON.stringify(data));
displayClass = data;
});
var ret = display.hasPrivateWindow(displayClass.id); var ret = display.hasPrivateWindow(displayClass.id);
if (ret == undefined) { if (ret == undefined) {
console.log("Failed to check has privateWindow or not."); console.log("Failed to check has privateWindow or not.");
......
...@@ -33,14 +33,8 @@ var observer = { ...@@ -33,14 +33,8 @@ var observer = {
console.log('onUnhandledException, errorMsg: ', errorMsg) console.log('onUnhandledException, errorMsg: ', errorMsg)
} }
} }
errorManager.registerErrorObserver(observer) const registerErrorObserverNumber=errorManager.registerErrorObserver(observer)
.then((data) => { console.info(registerErrorObserverNumber)
console.log('----------- registerErrorObserver success ----------', data);
})
.catch((err) => {
console.log('----------- registerErrorObserver fail ----------', err);
})
``` ```
## ErrorManager.unregisterErrorObserver ## ErrorManager.unregisterErrorObserver
......
...@@ -336,7 +336,7 @@ InputMethodSetting.listInputMethod((err,data) => { ...@@ -336,7 +336,7 @@ InputMethodSetting.listInputMethod((err,data) => {
### listInputMethod ### listInputMethod
listInputMethod(): Promise&lt;Array<InputMethodProperty>&gt; listInputMethod(): Promise&lt;Array&lt;InputMethodProperty&gt;&gt;
查询已安装的输入法列表。使用promise形式返回结果。参数个数为0,否则抛出异常。 查询已安装的输入法列表。使用promise形式返回结果。参数个数为0,否则抛出异常。
......
...@@ -64,7 +64,7 @@ media.createVideoPlayer((error, video) => { ...@@ -64,7 +64,7 @@ media.createVideoPlayer((error, video) => {
videoPlayer = video; videoPlayer = video;
console.info('video createVideoPlayer success'); console.info('video createVideoPlayer success');
} else { } else {
console.info(`video createVideoPlayer fail, error:${error.message}`); console.info(`video createVideoPlayer fail, error:${error}`);
} }
}); });
``` ```
...@@ -96,7 +96,7 @@ media.createVideoPlayer().then((video) => { ...@@ -96,7 +96,7 @@ media.createVideoPlayer().then((video) => {
console.info('video createVideoPlayer fail'); console.info('video createVideoPlayer fail');
} }
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -146,7 +146,7 @@ media.createVideoRecorder((error, video) => { ...@@ -146,7 +146,7 @@ media.createVideoRecorder((error, video) => {
videoRecorder = video; videoRecorder = video;
console.info('video createVideoRecorder success'); console.info('video createVideoRecorder success');
} else { } else {
console.info(`video createVideoRecorder fail, error:${error.message}`); console.info(`video createVideoRecorder fail, error:${error}`);
} }
}); });
``` ```
...@@ -179,7 +179,7 @@ media.createVideoRecorder().then((video) => { ...@@ -179,7 +179,7 @@ media.createVideoRecorder().then((video) => {
console.info('video createVideoRecorder fail'); console.info('video createVideoRecorder fail');
} }
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -447,7 +447,7 @@ audioPlayer.getTrackDescription((error, arrlist) => { ...@@ -447,7 +447,7 @@ audioPlayer.getTrackDescription((error, arrlist) => {
printfDescription(arrlist[i]); printfDescription(arrlist[i]);
} }
} else { } else {
console.log(`audio getTrackDescription fail, error:${error.message}`); console.log(`audio getTrackDescription fail, error:${error}`);
} }
}); });
``` ```
...@@ -484,7 +484,7 @@ audioPlayer.getTrackDescription().then((arrlist) => { ...@@ -484,7 +484,7 @@ audioPlayer.getTrackDescription().then((arrlist) => {
console.log('audio getTrackDescription fail'); console.log('audio getTrackDescription fail');
} }
}).catch((error) => { }).catch((error) => {
console.info(`audio catchCallback, error:${error.message}`); console.info(`audio catchCallback, error:${error}`);
}); });
for (let i = 0; i < arrayDescription.length; i++) { for (let i = 0; i < arrayDescription.length; i++) {
...@@ -569,9 +569,7 @@ audioPlayer.on('finish', () => { //设置'finish'事件回调 ...@@ -569,9 +569,7 @@ audioPlayer.on('finish', () => { //设置'finish'事件回调
audioPlayer.stop(); //停止播放,并触发'stop'事件回调 audioPlayer.stop(); //停止播放,并触发'stop'事件回调
}); });
audioPlayer.on('error', (error) => { //设置'error'事件回调 audioPlayer.on('error', (error) => { //设置'error'事件回调
console.info(`audio error called, errName is ${error.name}`); console.info(`audio error called, error: ${error}`);
console.info(`audio error called, errCode is ${error.code}`);
console.info(`audio error called, errMessage is ${error.message}`);
}); });
// 用户选择视频设置fd(本地播放) // 用户选择视频设置fd(本地播放)
...@@ -636,9 +634,7 @@ on(type: 'error', callback: ErrorCallback): void ...@@ -636,9 +634,7 @@ on(type: 'error', callback: ErrorCallback): void
```js ```js
audioPlayer.on('error', (error) => { //设置'error'事件回调 audioPlayer.on('error', (error) => { //设置'error'事件回调
console.info(`audio error called, errName is ${error.name}`); //打印错误类型名称 console.info(`audio error called, error: ${error}`);
console.info(`audio error called, errCode is ${error.code}`); //打印错误码
console.info(`audio error called, errMessage is ${error.message}`);//打印错误类型详细描述
}); });
audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件 audioPlayer.setVolume(3); //设置volume为无效值,触发'error'事件
``` ```
...@@ -762,7 +758,7 @@ setDisplaySurface(surfaceId: string): Promise\<void> ...@@ -762,7 +758,7 @@ setDisplaySurface(surfaceId: string): Promise\<void>
videoPlayer.setDisplaySurface(surfaceId).then(() => { videoPlayer.setDisplaySurface(surfaceId).then(() => {
console.info('setDisplaySurface success'); console.info('setDisplaySurface success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -812,7 +808,7 @@ prepare(): Promise\<void> ...@@ -812,7 +808,7 @@ prepare(): Promise\<void>
videoPlayer.prepare().then(() => { videoPlayer.prepare().then(() => {
console.info('prepare success'); console.info('prepare success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -862,7 +858,7 @@ play(): Promise\<void>; ...@@ -862,7 +858,7 @@ play(): Promise\<void>;
videoPlayer.play().then(() => { videoPlayer.play().then(() => {
console.info('play success'); console.info('play success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -912,7 +908,7 @@ pause(): Promise\<void> ...@@ -912,7 +908,7 @@ pause(): Promise\<void>
videoPlayer.pause().then(() => { videoPlayer.pause().then(() => {
console.info('pause success'); console.info('pause success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -962,7 +958,7 @@ stop(): Promise\<void> ...@@ -962,7 +958,7 @@ stop(): Promise\<void>
videoPlayer.stop().then(() => { videoPlayer.stop().then(() => {
console.info('stop success'); console.info('stop success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1012,7 +1008,7 @@ reset(): Promise\<void> ...@@ -1012,7 +1008,7 @@ reset(): Promise\<void>
videoPlayer.reset().then(() => { videoPlayer.reset().then(() => {
console.info('reset success'); console.info('reset success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1103,13 +1099,13 @@ let seekTime = 5000; ...@@ -1103,13 +1099,13 @@ let seekTime = 5000;
videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点 videoPlayer.seek(seekTime).then((seekDoneTime) => { // seekDoneTime表示seek完成后的时间点
console.info('seek success'); console.info('seek success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => { videoPlayer.seek(seekTime, seekMode).then((seekDoneTime) => {
console.info('seek success'); console.info('seek success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1168,7 +1164,7 @@ let vol = 0.5; ...@@ -1168,7 +1164,7 @@ let vol = 0.5;
videoPlayer.setVolume(vol).then() => { videoPlayer.setVolume(vol).then() => {
console.info('setVolume success'); console.info('setVolume success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1218,7 +1214,7 @@ release(): Promise\<void> ...@@ -1218,7 +1214,7 @@ release(): Promise\<void>
videoPlayer.release().then() => { videoPlayer.release().then() => {
console.info('release success'); console.info('release success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1253,7 +1249,7 @@ videoPlayer.getTrackDescription((error, arrlist) => { ...@@ -1253,7 +1249,7 @@ videoPlayer.getTrackDescription((error, arrlist) => {
printfDescription(arrlist[i]); printfDescription(arrlist[i]);
} }
} else { } else {
console.log(`video getTrackDescription fail, error:${error.message}`); console.log(`video getTrackDescription fail, error:${error}`);
} }
}); });
``` ```
...@@ -1291,7 +1287,7 @@ videoPlayer.getTrackDescription().then((arrlist) => { ...@@ -1291,7 +1287,7 @@ videoPlayer.getTrackDescription().then((arrlist) => {
console.log('video getTrackDescription fail'); console.log('video getTrackDescription fail');
} }
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
for (let i = 0; i < arrayDescription.length; i++) { for (let i = 0; i < arrayDescription.length; i++) {
printfDescription(arrayDescription[i]); printfDescription(arrayDescription[i]);
...@@ -1357,7 +1353,7 @@ let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X; ...@@ -1357,7 +1353,7 @@ let speed = media.PlaybackSpeed.SPEED_FORWARD_2_00_X;
videoPlayer.setSpeed(speed).then() => { videoPlayer.setSpeed(speed).then() => {
console.info('setSpeed success'); console.info('setSpeed success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1416,7 +1412,7 @@ let bitrate = 1024000; ...@@ -1416,7 +1412,7 @@ let bitrate = 1024000;
videoPlayer.selectBitrate(bitrate).then() => { videoPlayer.selectBitrate(bitrate).then() => {
console.info('selectBitrate success'); console.info('selectBitrate success');
}).catch((error) => { }).catch((error) => {
console.info(`video catchCallback, error:${error.message}`); console.info(`video catchCallback, error:${error}`);
}); });
``` ```
...@@ -1533,9 +1529,7 @@ on(type: 'error', callback: ErrorCallback): void ...@@ -1533,9 +1529,7 @@ on(type: 'error', callback: ErrorCallback): void
```js ```js
videoPlayer.on('error', (error) => { // 设置'error'事件回调 videoPlayer.on('error', (error) => { // 设置'error'事件回调
console.info(`video error called, errName is ${error.name}`); // 打印错误类型名称 console.info(`video error called, error: ${error}`);
console.info(`video error called, errCode is ${error.code}`); // 打印错误码
console.info(`video error called, errMessage is ${error.message}`);// 打印错误类型详细描述
}); });
videoPlayer.url = 'fd://error'; //设置错误的播放地址,触发'error'事件 videoPlayer.url = 'fd://error'; //设置错误的播放地址,触发'error'事件
``` ```
...@@ -1644,7 +1638,7 @@ audioPlayer.getTrackDescription((error, arrlist) => { ...@@ -1644,7 +1638,7 @@ audioPlayer.getTrackDescription((error, arrlist) => {
printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值 printfItemDescription(arrlist[i], MD_KEY_TRACK_TYPE); //打印出每条轨道MD_KEY_TRACK_TYPE的值
} }
} else { } else {
console.log(`audio getTrackDescription fail, error:${error.message}`); console.log(`audio getTrackDescription fail, error:${error}`);
} }
}); });
``` ```
...@@ -1824,9 +1818,7 @@ let audioRecorderConfig = { ...@@ -1824,9 +1818,7 @@ let audioRecorderConfig = {
location : { latitude : 30, longitude : 130}, location : { latitude : 30, longitude : 130},
} }
audioRecorder.on('error', (error) => { // 设置'error'事件回调 audioRecorder.on('error', (error) => { // 设置'error'事件回调
console.info(`audio error called, errName is ${error.name}`); console.info(`audio error called, error: ${error}`);
console.info(`audio error called, errCode is ${error.code}`);
console.info(`audio error called, errMessage is ${error.message}`);
}); });
audioRecorder.on('prepare', () => { // 设置'prepare'事件回调 audioRecorder.on('prepare', () => { // 设置'prepare'事件回调
console.log('prepare success'); console.log('prepare success');
...@@ -1872,9 +1864,7 @@ on(type: 'error', callback: ErrorCallback): void ...@@ -1872,9 +1864,7 @@ on(type: 'error', callback: ErrorCallback): void
```js ```js
audioRecorder.on('error', (error) => { // 设置'error'事件回调 audioRecorder.on('error', (error) => { // 设置'error'事件回调
console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称 console.info(`audio error called, error: ${error}`);
console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
}); });
audioRecorder.prepare(); // prepare不设置参数,触发'error'事件 audioRecorder.prepare(); // prepare不设置参数,触发'error'事件
``` ```
...@@ -2492,10 +2482,7 @@ on(type: 'error', callback: ErrorCallback): void ...@@ -2492,10 +2482,7 @@ on(type: 'error', callback: ErrorCallback): void
```js ```js
videoRecorder.on('error', (error) => { // 设置'error'事件回调 videoRecorder.on('error', (error) => { // 设置'error'事件回调
console.info(`audio error called, errName is ${error.name}`); // 打印错误类型名称 console.info(`audio error called, error: ${error}`);
console.info(`audio error called, errCode is ${error.code}`); // 打印错误码
console.info(`audio error called, errMessage is ${error.message}`); // 打印错误类型详细描述
});
// 当获取videoRecordState接口出错时通过此订阅事件上报 // 当获取videoRecordState接口出错时通过此订阅事件上报
``` ```
......
...@@ -1428,7 +1428,7 @@ Notification.getSlotNumByBundle(bundle).then((data) => { ...@@ -1428,7 +1428,7 @@ Notification.getSlotNumByBundle(bundle).then((data) => {
## Notification.remove ## Notification.remove
remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCallback\<void\>): void remove(bundle: BundleOption, notificationKey: NotificationKey, reason: RemoveReason, callback: AsyncCallback\<void\>): void
删除指定通知(Callback形式)。 删除指定通知(Callback形式)。
...@@ -1441,9 +1441,10 @@ remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCa ...@@ -1441,9 +1441,10 @@ remove(bundle: BundleOption, notificationKey: NotificationKey, callback: AsyncCa
**参数:** **参数:**
| 名称 | 类型 | 必填 | 描述 | | 名称 | 类型 | 必填 | 描述 |
| --------------- | ----------------------------------- | ---- | -------------------- | | --------------- | ----------------------------------| ---- | -------------------- |
| bundle | [BundleOption](#bundleoption) | 是 | 指定包信息。 | | bundle | [BundleOption](#bundleoption) | 是 | 指定包信息。 |
| notificationKey | [NotificationKey](#notificationkey) | 是 | 通知键值。 | | notificationKey | [NotificationKey](#notificationkey) | 是 | 通知键值。 |
| reason | [RemoveReason](#removereason9) | 是 | 通知删除原因。 |
| callback | AsyncCallback\<void\> | 是 | 删除指定通知回调函数。 | | callback | AsyncCallback\<void\> | 是 | 删除指定通知回调函数。 |
**示例:** **示例:**
...@@ -1459,14 +1460,15 @@ var notificationKey = { ...@@ -1459,14 +1460,15 @@ var notificationKey = {
id: 0, id: 0,
label: "label", label: "label",
} }
Notification.remove(bundle, notificationKey, removeCallback); var reason = Notification.RemoveReason.CLICK_REASON_REMOVE;
Notification.remove(bundle, notificationKey, reason, removeCallback);
``` ```
## Notification.remove ## Notification.remove
remove(bundle: BundleOption, notificationKey: NotificationKey): Promise\<void\> remove(bundle: BundleOption, notificationKey: NotificationKey, reason: RemoveReason): Promise\<void\>
删除指定通知(Promise形式)。 删除指定通知(Promise形式)。
...@@ -1482,6 +1484,7 @@ remove(bundle: BundleOption, notificationKey: NotificationKey): Promise\<void\> ...@@ -1482,6 +1484,7 @@ remove(bundle: BundleOption, notificationKey: NotificationKey): Promise\<void\>
| --------------- | --------------- | ---- | ---------- | | --------------- | --------------- | ---- | ---------- |
| bundle | [BundleOption](#bundleoption) | 是 | 指定包信息。 | | bundle | [BundleOption](#bundleoption) | 是 | 指定包信息。 |
| notificationKey | [NotificationKey](#notificationkey) | 是 | 通知键值。 | | notificationKey | [NotificationKey](#notificationkey) | 是 | 通知键值。 |
| reason | [RemoveReason](#removereason9) | 是 | 通知删除原因。 |
**示例:** **示例:**
...@@ -1493,7 +1496,8 @@ var notificationKey = { ...@@ -1493,7 +1496,8 @@ var notificationKey = {
id: 0, id: 0,
label: "label", label: "label",
} }
Notification.remove(bundle, notificationKey).then(() => { var reason = Notification.RemoveReason.CLICK_REASON_REMOVE;
Notification.remove(bundle, notificationKey, reason).then(() => {
console.info("==========================>removeCallback=======================>"); console.info("==========================>removeCallback=======================>");
}); });
``` ```
...@@ -1502,7 +1506,7 @@ Notification.remove(bundle, notificationKey).then(() => { ...@@ -1502,7 +1506,7 @@ Notification.remove(bundle, notificationKey).then(() => {
## Notification.remove ## Notification.remove
remove(hashCode: string, callback: AsyncCallback\<void\>): void remove(hashCode: string, reason: RemoveReason, callback: AsyncCallback\<void\>): void
删除指定通知(Callback形式)。 删除指定通知(Callback形式)。
...@@ -1517,6 +1521,7 @@ remove(hashCode: string, callback: AsyncCallback\<void\>): void ...@@ -1517,6 +1521,7 @@ remove(hashCode: string, callback: AsyncCallback\<void\>): void
| 名称 | 类型 | 必填 | 描述 | | 名称 | 类型 | 必填 | 描述 |
| -------- | --------------------- | ---- | -------------------- | | -------- | --------------------- | ---- | -------------------- |
| hashCode | string | 是 | 通知唯一ID。 | | hashCode | string | 是 | 通知唯一ID。 |
| reason | [RemoveReason](#removereason9) | 是 | 通知删除原因。 |
| callback | AsyncCallback\<void\> | 是 | 删除指定通知回调函数。 | | callback | AsyncCallback\<void\> | 是 | 删除指定通知回调函数。 |
**示例:** **示例:**
...@@ -1527,15 +1532,15 @@ var hashCode = 'hashCode' ...@@ -1527,15 +1532,15 @@ var hashCode = 'hashCode'
function removeCallback(err) { function removeCallback(err) {
console.info("==========================>removeCallback=======================>"); console.info("==========================>removeCallback=======================>");
} }
var reason = Notification.RemoveReason.CANCEL_REASON_REMOVE;
Notification.remove(hashCode, removeCallback); Notification.remove(hashCode, reason, removeCallback);
``` ```
## Notification.remove ## Notification.remove
remove(hashCode: string): Promise\<void\> remove(hashCode: string, reason: RemoveReason): Promise\<void\>
删除指定通知(Promise形式)。 删除指定通知(Promise形式)。
...@@ -1550,13 +1555,14 @@ remove(hashCode: string): Promise\<void\> ...@@ -1550,13 +1555,14 @@ remove(hashCode: string): Promise\<void\>
| 名称 | 类型 | 必填 | 描述 | | 名称 | 类型 | 必填 | 描述 |
| -------- | ---------- | ---- | ---------- | | -------- | ---------- | ---- | ---------- |
| hashCode | string | 是 | 通知唯一ID。 | | hashCode | string | 是 | 通知唯一ID。 |
| reason | [RemoveReason](#removereason9) | 是 | 通知删除原因。 |
**示例:** **示例:**
```js ```js
var hashCode = 'hashCode' var hashCode = 'hashCode'
var reason = Notification.RemoveReason.CLICK_REASON_REMOVE;
Notification.remove(hashCode).then(() => { Notification.remove(hashCode, reason).then(() => {
console.info("==========================>removeCallback=======================>"); console.info("==========================>removeCallback=======================>");
}); });
``` ```
...@@ -3877,3 +3883,14 @@ Notification.subscribe(subscriber, subscribeCallback); ...@@ -3877,3 +3883,14 @@ Notification.subscribe(subscriber, subscribeCallback);
| TYPE_NORMAL | 0 | 一般通知。 | | TYPE_NORMAL | 0 | 一般通知。 |
| TYPE_CONTINUOUS | 1 | 连续通知。 | | TYPE_CONTINUOUS | 1 | 连续通知。 |
| TYPE_TIMER | 2 | 计划通知。 | | TYPE_TIMER | 2 | 计划通知。 |
## RemoveReason<sup>9+</sup>
**系统能力**:SystemCapability.Notification.Notification
**系统API**: 此接口为系统接口,三方应用不支持调用。
| 名称 | 值 | 描述 |
| -------------------- | --- | -------------------- |
| CLICK_REASON_REMOVE | 1 | 点击通知后删除通知。 |
| CANCEL_REASON_REMOVE | 2 | 用户删除通知。 |
\ No newline at end of file
...@@ -25,6 +25,7 @@ import pasteboard from '@ohos.pasteboard'; ...@@ -25,6 +25,7 @@ import pasteboard from '@ohos.pasteboard';
| MIMETYPE_TEXT_WANT<sup>7+</sup> | string | 是 | 否 | Want的MIME类型定义。 | | MIMETYPE_TEXT_WANT<sup>7+</sup> | string | 是 | 否 | Want的MIME类型定义。 |
| MIMETYPE_TEXT_PLAIN<sup>7+</sup> | string | 是 | 否 | Plain&nbsp;text文本的MIME类型定义。 | | MIMETYPE_TEXT_PLAIN<sup>7+</sup> | string | 是 | 否 | Plain&nbsp;text文本的MIME类型定义。 |
| MIMETYPE_TEXT_URI<sup>7+</sup> | string | 是 | 否 | URI文本的MIME类型定义。 | | MIMETYPE_TEXT_URI<sup>7+</sup> | string | 是 | 否 | URI文本的MIME类型定义。 |
| MIMETYPE_PIXELMAP<sup>9+</sup> | string | 是 | 否 | PixelMap的MIME类型定义。 |
## pasteboard.createPlainTextData ## pasteboard.createPlainTextData
...@@ -128,7 +129,43 @@ createUriData(uri:string): PasteData ...@@ -128,7 +129,43 @@ createUriData(uri:string): PasteData
**示例** **示例**
```js ```js
var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1?user.txt"); var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1/user.txt");
```
## pasteboard.createPixelMapData<sup>9+</sup>
createPixelMapData((pixelMap: image.PixelMap): PasteData
构建一个PixelMap剪贴板内容对象。
**系统能力**: SystemCapability.MiscServices.Pasteboard
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pixelMap | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | 待保存的PixelMap内容。 |
**返回值**
| 类型 | 说明 |
| -------- | -------- |
| [PasteData](#pastedata) | 包含此内容的剪贴板内容对象。 |
**示例**
```js
import image from '@ohos.multimedia.image';
var buffer = new ArrayBuffer(128)
var opt = {
size: { height: 3, width: 5 },
pixelFormat: 3,
editable: true,
alphaType: 1,
scaleMode: 1
}
image.createPixelMap(buffer, opt).then((pixelMap) => {
var pasteData = pasteboard.createPixelMapData(pixelMap);
})
``` ```
...@@ -233,23 +270,72 @@ createUriRecord(uri:string): PasteDataRecord ...@@ -233,23 +270,72 @@ createUriRecord(uri:string): PasteDataRecord
**示例** **示例**
```js ```js
var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1?user.txt"); var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1/user.txt");
``` ```
## pasteboard.createPixelMapRecord<sup>9+</sup>
createPixelMapRecord(pixelMap:image.PixelMap): PasteDataRecord
创建一条PixelMap对象内容的条目。
**系统能力**: SystemCapability.MiscServices.Pasteboard
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pixelMap | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | PixelMap对象内容。 |
**返回值**
| 类型 | 说明 |
| -------- | -------- |
| [PasteDataRecord](#pastedatarecord7) | 一条新建的PixelMap对象内容条目。 |
**示例**
```js
import image from '@ohos.multimedia.image';
var buffer = new ArrayBuffer(128)
var opt = {
size: { height: 3, width: 5 },
pixelFormat: 3,
editable: true,
alphaType: 1,
scaleMode: 1
}
image.createPixelMap(buffer, opt).then((pixelMap) => {
var record = pasteboard.createPixelMapRecord(pixelMap);
})
```
## ShareOption<sup>9+</sup>
可粘贴数据的范围类型枚举。
**系统能力**: SystemCapability.MiscServices.Pasteboard
| 名称 | 说明 |
| ----- | ----------------------- |
| InApp |InApp表示仅允许同应用内粘贴。 |
| LocalDevice |LocalDevice表示仅允许在此设备中粘贴。 |
## PasteDataProperty<sup>7+</sup> ## PasteDataProperty<sup>7+</sup>
定义了剪贴板中所有内容条目的属性,包含时间戳、数据类型以及一些附加数据等。 定义了剪贴板中所有内容条目的属性,包含时间戳、数据类型、粘贴范围以及一些附加数据等。
**系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Pasteboard。 **系统能力**: 以下各项对应的系统能力均为SystemCapability.MiscServices.Pasteboard。
| 名称 | 参数类型 | 可读 | 可写 | 说明 | | 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- | | -------- | -------- | -------- | -------- | -------- |
| additions | {[key:&nbsp;string]:&nbsp;object} | 是 | 是 | 设置的其他附加属性数据。 | | additions<sup>7+</sup> | {[key:&nbsp;string]:&nbsp;object} | 是 | 是 | 设置的其他附加属性数据。 |
| mimeTypes | Array&lt;string&gt; | 是 | 否 | 剪贴板内容条目的数据类型,&nbsp;非重复的类型列表。 | | mimeTypes<sup>7+</sup> | Array&lt;string&gt; | 是 | 否 | 剪贴板内容条目的数据类型,&nbsp;非重复的类型列表。 |
| tag | string | 是 | 是 | 用户自定义标签。 | | tag<sup>7+</sup> | string | 是 | 是 | 用户自定义标签。 |
| timestamp | number | 是 | 否 | 剪贴板数据的写入时间戳(毫秒)。 | | timestamp<sup>7+</sup> | number | 是 | 否 | 剪贴板数据的写入时间戳(毫秒)。 |
| localOnly | boolean | 是 | 是 | 配置剪贴板内容的“仅在本地”标志位。<br/>-&nbsp;默认情况为true。<br/>-&nbsp;配置为true时,表示内容仅在本地,不会在设备之间传递。<br/>-&nbsp;配置为false时,表示内容将在设备间传递。 | | localOnly<sup>7+</sup> | boolean | 是 | 是 | 配置剪贴板内容的“仅在本地”标志位。<br/>-&nbsp;默认情况为true。<br/>-&nbsp;配置为true时,表示内容仅在本地,不会在设备之间传递。<br/>-&nbsp;配置为false时,表示内容将在设备间传递。 |
| shareOption<sup>9+</sup> | [ShareOption](#shareoption9) | 是 | 是 | 指示剪贴板数据可以粘贴到的范围。 |
## PasteDataRecord<sup>7+</sup> ## PasteDataRecord<sup>7+</sup>
...@@ -268,6 +354,7 @@ createUriRecord(uri:string): PasteDataRecord ...@@ -268,6 +354,7 @@ createUriRecord(uri:string): PasteDataRecord
| mimeType<sup>7+</sup> | string | 是 | 否 | 数据类型。 | | mimeType<sup>7+</sup> | string | 是 | 否 | 数据类型。 |
| plainText<sup>7+</sup> | string | 是 | 否 | 文本内容。 | | plainText<sup>7+</sup> | string | 是 | 否 | 文本内容。 |
| uri<sup>7+</sup> | string | 是 | 否 | URI内容。 | | uri<sup>7+</sup> | string | 是 | 否 | URI内容。 |
| pixelMap<sup>9+</sup> | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | 否 | PixelMap内容。 |
### convertToText<sup>7+</sup> ### convertToText<sup>7+</sup>
...@@ -286,7 +373,7 @@ convertToText(): Promise&lt;string&gt; ...@@ -286,7 +373,7 @@ convertToText(): Promise&lt;string&gt;
**示例** **示例**
```js ```js
var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1?user.txt"); var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1/user.txt");
record.convertToText().then((data) => { record.convertToText().then((data) => {
console.info('convertToText success data : ' + JSON.stringify(data)); console.info('convertToText success data : ' + JSON.stringify(data));
}).catch((error) => { }).catch((error) => {
...@@ -311,7 +398,7 @@ convertToText(callback: AsyncCallback&lt;string&gt;): void ...@@ -311,7 +398,7 @@ convertToText(callback: AsyncCallback&lt;string&gt;): void
**示例** **示例**
```js ```js
var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1?user.txt"); var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1/user.txt");
record.convertToText((err, data) => { record.convertToText((err, data) => {
if (err) { if (err) {
console.error('convertToText failed because ' + JSON.stringify(err)); console.error('convertToText failed because ' + JSON.stringify(err));
...@@ -416,11 +503,44 @@ getPrimaryUri(): string ...@@ -416,11 +503,44 @@ getPrimaryUri(): string
**示例** **示例**
```js ```js
var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1?user.txt"); var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1/user.txt");
var uri = pasteData.getPrimaryUri(); var uri = pasteData.getPrimaryUri();
``` ```
### getPrimaryPixelMap<sup>9+</sup>
getPrimaryPixelMap(): image.PixelMap
获取首个条目的PixelMap对象内容。
**系统能力**: SystemCapability.MiscServices.Pasteboard
**返回值**
| 类型 | 说明 |
| -------- | -------- |
| [image.PixelMap](js-apis-image.md#pixelmap7) | PixelMap对象内容。 |
**示例**
```js
import image from '@ohos.multimedia.image';
var buffer = new ArrayBuffer(128)
var opt = {
size: { height: 3, width: 5 },
pixelFormat: 3,
editable: true,
alphaType: 1,
scaleMode: 1
}
image.createPixelMap(buffer, opt).then((pixelMap) => {
var pasteData = pasteboard.createPixelMapData(pixelMap);
var pixelMap = pasteData.getPrimaryPixelMap();
})
```
### addTextRecord<sup>7+</sup> ### addTextRecord<sup>7+</sup>
addTextRecord(text: string): void addTextRecord(text: string): void
...@@ -514,7 +634,39 @@ addUriRecord(uri: string): void ...@@ -514,7 +634,39 @@ addUriRecord(uri: string): void
```js ```js
var pasteData = pasteboard.createPlainTextData("hello"); var pasteData = pasteboard.createPlainTextData("hello");
pasteData.addUriRecord("dataability:///com.example.myapplication1?user.txt"); pasteData.addUriRecord("dataability:///com.example.myapplication1/user.txt");
```
### addPixelMapRecord<sup>9+</sup>
addPixelMapRecord(pixelMap: image.PixelMap): void
向当前剪贴板内容中添加一条pixelMap条目,并将MIMETYPE_PIXELMAP添加到[PasteDataProperty](#pastedataproperty7)的mimeTypes中。入参均不能为空,否则添加失败。
剪贴板内容中添加的条目达到数量上限512后,后续的添加操作无效。
**系统能力**: SystemCapability.MiscServices.Pasteboard
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| pixelMap | [image.PixelMap](js-apis-image.md#pixelmap7) | 是 | PixelMap对象内容。 |
**示例**
```js
import image from '@ohos.multimedia.image';
var buffer = new ArrayBuffer(128)
var opt = {
size: { height: 3, width: 5 },
pixelFormat: 3,
editable: true,
alphaType: 1,
scaleMode: 1
}
image.createPixelMap(buffer, opt).then((pixelMap) => {
var record = pasteboard.createPlainTextData("hello").addPixelMapRecord(pixelMap);
})
``` ```
...@@ -536,7 +688,7 @@ addRecord(record: PasteDataRecord): void ...@@ -536,7 +688,7 @@ addRecord(record: PasteDataRecord): void
**示例** **示例**
```js ```js
var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1?user.txt"); var pasteData = pasteboard.createUriData("dataability:///com.example.myapplication1/user.txt");
var textRecord = pasteboard.createPlainTextRecord("hello"); var textRecord = pasteboard.createPlainTextRecord("hello");
var html = "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + "<meta charset=\"utf-8\">\n" + "<title>HTML-PASTEBOARD_HTML</title>\n" + "</head>\n" + "<body>\n" + " <h1>HEAD</h1>\n" + " <p></p>\n" + "</body>\n" + "</html>"; var html = "<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + "<meta charset=\"utf-8\">\n" + "<title>HTML-PASTEBOARD_HTML</title>\n" + "</head>\n" + "<body>\n" + " <h1>HEAD</h1>\n" + " <p></p>\n" + "</body>\n" + "</html>";
var htmlRecord = pasteboard.createHtmlTextRecord(html); var htmlRecord = pasteboard.createHtmlTextRecord(html);
...@@ -608,6 +760,29 @@ getProperty(): PasteDataProperty ...@@ -608,6 +760,29 @@ getProperty(): PasteDataProperty
``` ```
### setProperty<sup>9+</sup>
setProperty(property: PasteDataProperty): void
设置属性描述对象,当前仅支持设置shareOption属性。
**系统能力**: SystemCapability.MiscServices.Pasteboard
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| property | [PasteDataProperty](#pastedataproperty7) | 是 | 属性描述对象。 |
**示例**
```js
var pasteData = pasteboard.createHtmlData('application/xml');
let prop = pasteData.getProperty();
prop.shareOption = pasteboard.ShareOption.InApp;
pasteData.setProperty(prop);
```
### getRecordAt<sup>7+</sup> ### getRecordAt<sup>7+</sup>
getRecordAt(index: number): PasteDataRecord getRecordAt(index: number): PasteDataRecord
...@@ -751,7 +926,7 @@ replaceRecordAt(index: number, record: PasteDataRecord): boolean ...@@ -751,7 +926,7 @@ replaceRecordAt(index: number, record: PasteDataRecord): boolean
```js ```js
var pasteData = pasteboard.createPlainTextData("hello"); var pasteData = pasteboard.createPlainTextData("hello");
var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1?user.txt"); var record = pasteboard.createUriRecord("dataability:///com.example.myapplication1/user.txt");
var isReplace = pasteData.replaceRecordAt(0, record); var isReplace = pasteData.replaceRecordAt(0, record);
``` ```
......
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
import pointer from '@ohos.multimodalInput.pointer'; import pointer from '@ohos.multimodalInput.pointer';
``` ```
## pointer.setPointerVisibele ## pointer.setPointerVisibele<sup>9+</sup>
setPointerVisible(visible: boolean, callback: AsyncCallback&lt;void&gt;): void setPointerVisible(visible: boolean, callback: AsyncCallback&lt;void&gt;): void
设置鼠标指针显示或者隐藏,使用callback方式作为异步方法 设置鼠标指针显示或者隐藏,使用callback异步回调
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer **系统能力**:SystemCapability.MultimodalInput.Input.Pointer
...@@ -25,7 +25,7 @@ setPointerVisible(visible: boolean, callback: AsyncCallback&lt;void&gt;): void ...@@ -25,7 +25,7 @@ setPointerVisible(visible: boolean, callback: AsyncCallback&lt;void&gt;): void
| 参数 | 类型 | 必填 | 说明 | | 参数 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ------------------------------------------------------------------- | | -------- | ------------------------- | ---- | ------------------------------------------------------------------- |
| visible | boolean | 是 | 鼠标指针显示或者隐藏状态,true: 鼠标指针显示; false: 鼠标指针隐藏。 | | visible | boolean | 是 | 鼠标指针显示或者隐藏状态,true: 鼠标指针显示; false: 鼠标指针隐藏。 |
| callback | AysncCallback&lt;void&gt; | 是 | 回调函数,异步返回查询结果。 | | callback | AysncCallback&lt;void&gt; | 是 | 回调函数。当设置鼠标显示或隐藏成功,err为undefined,否则为错误对象。 |
**示例** **示例**
...@@ -39,7 +39,7 @@ pointer.setPointerVisible(true, (err, data) => { ...@@ -39,7 +39,7 @@ pointer.setPointerVisible(true, (err, data) => {
); );
``` ```
## pointer.setPointerVisible ## pointer.setPointerVisible<sup>9+</sup>
setPointerVisible(visible: boolean): Promise&lt;void&gt; setPointerVisible(visible: boolean): Promise&lt;void&gt;
...@@ -62,18 +62,18 @@ setPointerVisible(visible: boolean): Promise&lt;void&gt; ...@@ -62,18 +62,18 @@ setPointerVisible(visible: boolean): Promise&lt;void&gt;
**示例** **示例**
```js ```js
pointer.setPointerVisible(false).then( data => { pointer.setPointerVisible(false).then(data => {
console.log(`set mouse pointer visible success`); console.log(`set mouse pointer visible success`);
}, data => { }, data => {
console.log(`set mouse pointer visible failed err=${JSON.stringify(data)}`); console.log(`set mouse pointer visible failed err=${JSON.stringify(data)}`);
}); });
``` ```
## pointer.isPointerVisible ## pointer.isPointerVisible<sup>9+</sup>
isPointerVisible(callback: AsyncCallback&lt;boolean&gt;): void isPointerVisible(callback: AsyncCallback&lt;boolean&gt;): void
获取鼠标指针显示或隐藏状态,使用callback方式作为异步方法 获取鼠标指针显示或隐藏状态,使用callback异步回调
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer **系统能力**:SystemCapability.MultimodalInput.Input.Pointer
...@@ -91,7 +91,7 @@ pointer.isPointerVisible((visible)=>{ ...@@ -91,7 +91,7 @@ pointer.isPointerVisible((visible)=>{
}); });
``` ```
## pointer.isPointerVisible ## pointer.isPointerVisible<sup>9+</sup>
isPointerVisible(): Promise&lt;boolean&gt; isPointerVisible(): Promise&lt;boolean&gt;
...@@ -112,3 +112,282 @@ pointer.isPointerVisible().then( data => { ...@@ -112,3 +112,282 @@ pointer.isPointerVisible().then( data => {
console.log(`isPointerThen success data=${JSON.stringify(data)}`); console.log(`isPointerThen success data=${JSON.stringify(data)}`);
}); });
``` ```
## pointer.setPointerSpeed<sup>9+</sup>
setPointerSpeed(speed: number, callback: AsyncCallback&lt;void&gt;): void
设置鼠标移动速度,使用callback异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ------------------------------------------------------------------- |
| speed | number | 是 | 鼠标移动速度设置挡位值1-11,最大值:11,最小值:1,标准值:5。 |
| callback | AysncCallback&lt;void&gt; | 是 | 回调函数。当设置鼠标速度成功,err为undefined,否则为错误对象。 |
**示例**
```js
pointer.setPointerSpeed(5, (err, data) => {
if (err) {
console.log(`set pointer speed failed. err=${JSON.stringify(err)}`);
return;
}
console.log(`set pointer speed success.`);
);
```
## pointer.setPointerSpeed<sup>9+</sup>
setPointerSpeed(speed: number): Promise&lt;void&gt;
设置鼠标移动速度,使用Promise异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| ------- | ------- | ---- | ------------------------------------------------------------------- |
| speed | number | 是 | 鼠标移动速度设置挡位值1-11,最大值:11,最小值:1,标准值:5。 |
**返回值**
| 参数 | 说明 |
| ------------------- | ------------------------------- |
| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
**示例**
```js
pointer.setPointerSpeed(5).then(data => {
console.log(`set pointer speed success`);
}, err => {
console.log(`set pointer speed failed err=${JSON.stringify(err)}`);
});
```
## pointer.getPointerSpeed<sup>9+</sup>
getPointerSpeed(callback: AsyncCallback&lt;number&gt;): void
获取当前鼠标移动速度,使用callback异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| -------- | ---------------------------- | ---- | ---------------------------- |
| callback | AsyncCallback&lt;number&gt; | 是 | 回调函数,异步返回查询结果。 |
**示例**
```js
pointer.getPointerSpeed((speed)=>{
console.log("The pointer speed is " + speed);
});
```
## pointer.getPointerSpeed<sup>9+</sup>
getPointerSpeed(): Promise&lt;number&gt;
获取当前鼠标移动速度,使用Promise异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**返回值**
| 参数 | 说明 |
| ---------------------- | ------------------------------- |
| Promise&lt;number&gt; | Promise实例,用于异步获取结果。 |
**示例**
```js
pointer.getPointerSpeed().then( data => {
console.log(`getPointerSpeed success data=${JSON.stringify(data)}`);
});
```
## pointer.getPointerStyle<sup>9+</sup>
getPointerStyle(windowId: number, callback: AsyncCallback&lt;PointerStyle&gt;): void
获取鼠标样式类型,使用callback异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| -------- | ---------------------------------------- | ---- | --------------------------------- |
| windowId | number | 是 | 输入设备的窗口id。 |
| callback | AsyncCallback&lt;[PointerStyle](#pointerstyle9)&gt; | 是 | 回调函数,异步返回查询结果。|
**示例**
```js
// 获取设备的鼠标样式。
import window from '@ohos.window';
var windowClass = null;
window.getTopWindow((err, data) => {
windowClass = data;
windowClass.getProperties((err, data) => {
var windowId = data.id;
pointer.getPointerStyle(windowId, (err, ret) => {
console.log("The mouse pointer style is: " + ret);
});
});
});
```
## pointer.getPointerStyle<sup>9+</sup>
getPointerStyle(windowId: number): Promise&lt;PointerStyle&gt;
获取鼠标样式类型,使用Promise方式作为异步方法。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 说明 |
| -------- | --------------------------------- |
| Promise&lt;[PointerStyle](#pointerstyle9)&gt; |Promise实例,用于异步获取结果。|
**示例**
```js
// 获取设备的鼠标样式。
import window from '@ohos.window';
var windowClass = null;
window.getTopWindow((err, data) => {
windowClass = data;
windowClass.getProperties((err, data) => {
var windowId = data.id;
pointer.getPointerStyle(windowId).then((ret) => {
console.log("The mouse pointer style is: " + ret);
});
});
});
```
## pointer.setPointerStyle<sup>9+</sup>
setPointerStyle(windowId: number, pointerStyle: PointerStyle, callback: AsyncCallback&lt;void&gt;): void
设置鼠标的样式类型,使用callback异步回调。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| -------- | ----------------------------------------| ---- | --------------------------------- |
| windowId | number | 是 | 输入设备的窗口id。 |
| pointerStyle | [PointerStyle](#pointerstyle9) | 是 | 鼠标样式id。 |
| callback | AysncCallback&lt;void&gt; | 是 | 回调函数。当设置样式成功,err为undefined,否则为错误对象。|
**示例**
```js
// 设置设备的鼠标样式。
import window from '@ohos.window';
var windowClass = null;
window.getTopWindow((err, data) => {
windowClass = data;
windowClass.getProperties((err, data) => {
var windowId = data.id;
pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS, (err) => {
console.log(`Set mouse pointer style success.`);
});
});
});
```
## pointer.setPointerStyle<sup>9+</sup>
setPointerStyle(windowId: number, pointerStyle: PointerStyle): Promise&lt;void&gt;
设置鼠标的样式类型,使用Promise方式作为异步方法。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
**参数**
| 参数 | 类型 | 必填 | 说明 |
| -------- | ---------------------------------------- | ---- | --------------------------------- |
| windowId | number | 是 | 输入设备的窗口id。 |
| pointerStyle | [PointerStyle](#pointerstyle9) | 是 | 鼠标样式id。 |
| Promise&lt;void&gt; | void | 是 |无返回结果的Promise对象。 |
**示例**
```js
// 设置设备的鼠标样式。
import window from '@ohos.window';
var windowClass = null;
window.getTopWindow((err, data) => {
windowClass = data;
windowClass.getProperties((err, data) => {
var windowId = data.id;
pointer.setPointerStyle(windowId, pointer.PointerStyle.CROSS).then(() => {
console.log(`Set mouse pointer style success`);
});
});
});
```
## PointerStyle<sup>9+</sup>
定义鼠标样式类型。
**系统能力**:SystemCapability.MultimodalInput.Input.Pointer
| 名称 | 值 | 说明 |
| ------------------- | ---- | --------- |
| DEFAULT | 0 | 默认 |
| EAST | 1 | 向东箭头 |
| WEST | 2 | 向西箭头|
| SOUTH | 3 | 向南箭头 |
| NORTH | 4 | 向北箭头 |
| WEST_EAST | 5 | 向西东箭头 |
| NORTH_SOUTH | 6 | 向北南箭头 |
| NORTH_EAST | 7 | 向东北箭头 |
| NORTH_WEST | 8 | 向西北箭头 |
| SOUTH_EAST | 9 | 向东南箭头 |
| SOUTH_WEST | 10 | 向西南箭头 |
| NORTH_EAST_SOUTH_WEST | 11 | 东北西南调整 |
| NORTH_WEST_SOUTH_EAST | 12 | 西北东南调整 |
| CROSS | 13 | 准确选择 |
| CURSOR_COPY | 14 | 拷贝 |
| CURSOR_FORBID | 15 | 不可用 |
| COLOR_SUCKER | 16 | 滴管 |
| HAND_GRABBING | 17 | 并拢的手 |
| HAND_OPEN | 18 | 张开的手 |
| HAND_POINTING | 19 | 手形指针 |
| HELP | 20 | 帮助选择 |
| MOVE | 21 | 移动 |
| RESIZE_LEFT_RIGHT | 22 | 内部左右调整 |
| RESIZE_UP_DOWN | 23 | 内部上下调整 |
| SCREENSHOT_CHOOSE | 24 | 截图十字准星 |
| SCREENSHOT_CURSOR | 25 | 截图 |
| TEXT_CURSOR | 26 | 文本选择 |
| ZOOM_IN | 27 | 放大 |
| ZOOM_OUT | 28 | 缩小 |
| MIDDLE_BTN_EAST | 29 | 向东滚动 |
| MIDDLE_BTN_WEST | 30 | 向西滚动 |
| MIDDLE_BTN_SOUTH | 31 | 向南滚动 |
| MIDDLE_BTN_NORTH | 32 | 向北滚动 |
| MIDDLE_BTN_NORTH_SOUTH | 33 | 向北南滚动 |
| MIDDLE_BTN_NORTH_EAST | 34 | 向东北滚动 |
| MIDDLE_BTN_NORTH_WEST | 35 | 向西北滚动 |
| MIDDLE_BTN_SOUTH_EAST | 36 | 向东南滚动 |
| MIDDLE_BTN_SOUTH_WEST | 37 | 向西南滚动 |
| MIDDLE_BTN_NORTH_SOUTH_WEST_EAST | 38 | 四向锥形移动 |
...@@ -169,6 +169,62 @@ unlockScreen(): Promise&lt;void&gt; ...@@ -169,6 +169,62 @@ unlockScreen(): Promise&lt;void&gt;
}); });
``` ```
## screenlock.lockScreen<sup>9+</sup>
lockScreen(callback: AsyncCallback&lt;void&gt;): void
锁定屏幕,使用callback作为异步方法。
**系统能力**: SystemCapability.MiscServices.ScreenLock
**系统API**:此接口为系统接口,三方应用不支持调用。
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;void&gt; | 是 | 回调函数,失败时返回错误信息。 |
**示例**
```js
screenlock.lockScreen((err) => {
if (err) {
console.error('lockScreen callback error -> ${JSON.stringify(err)}');
return;
}
console.info('lockScreen callback success');
});
```
## screenlock.lockScreen<sup>9+</sup>
lockScreen(): Promise&lt;void&gt;
锁定屏幕,使用Promise作为异步方法。
**系统能力**: SystemCapability.MiscServices.ScreenLock
**系统API**:此接口为系统接口,三方应用不支持调用。
**返回值**
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | 以Promise形式返回结果。 |
**示例**
```js
screenlock.lockScreen().then(() => {
console.log('lockScreen success');
}).catch((err) => {
console.error('lockScreen fail, promise: err->${JSON.stringify(err)}');
});
```
## screenlock.on<sup>9+</sup> ## screenlock.on<sup>9+</sup>
on(type: 'beginWakeUp' | 'endWakeUp' | 'beginScreenOn' | 'endScreenOn' | 'beginScreenOff' | 'endScreenOff' | 'unlockScreen' | 'beginExitAnimation', callback: Callback\<void\>): void on(type: 'beginWakeUp' | 'endWakeUp' | 'beginScreenOn' | 'endScreenOn' | 'beginScreenOff' | 'endScreenOff' | 'unlockScreen' | 'beginExitAnimation', callback: Callback\<void\>): void
......
...@@ -323,6 +323,47 @@ decode(input: Uint8Array, options?: { stream?: false }): string ...@@ -323,6 +323,47 @@ decode(input: Uint8Array, options?: { stream?: false }): string
``` ```
### decodeWithStream<sup>9+</sup>
decodeWithStream(input: Uint8Array, options?: { stream?: boolean }): string
通过输入参数解码后输出对应文本。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| input | Uint8Array | 是 | 符合格式需要解码的数组。 |
| options | Object | 否 | 解码相关选项参数。 |
**表2** options
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| stream | boolean | 否 | 在随后的decodeWithStream()调用中是否跟随附加数据块。如果以块的形式处理数据,则设置为true;如果处理最后的数据块或数据未分块,则设置为false。默认为false。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| string | 解码后的数据。 |
**示例:**
```js
var textDecoder = new util.TextDecoder("utf-8",{ignoreBOM: true});
var result = new Uint8Array(6);
result[0] = 0xEF;
result[1] = 0xBB;
result[2] = 0xBF;
result[3] = 0x61;
result[4] = 0x62;
result[5] = 0x63;
console.log("input num:");
var retStr = textDecoder.decodeWithStream( result , {stream: false});
console.log("retStr = " + retStr);
```
## TextEncoder ## TextEncoder
### 属性 ### 属性
...@@ -2624,3 +2665,104 @@ isWeakSet(value: Object): boolean ...@@ -2624,3 +2665,104 @@ isWeakSet(value: Object): boolean
var that = new util.types(); var that = new util.types();
var result = that.isWeakSet(new WeakSet()); var result = that.isWeakSet(new WeakSet());
``` ```
### isBigInt64Array<sup>8+</sup>
isBigInt64Array(value: Object): boolean
检查输入的value是否是BigInt64Array类型。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | Object | 是 | 待检测对象。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 判断的结果,如果是内置包含的BigInt64Array类型为true,反之为false。 |
**示例:**
```js
var that = new util.types();
var result = that.isBigInt64Array(new BigInt64Array([]));
```
### isBigUint64Array<sup>8+</sup>
isBigUint64Array(value: Object): boolean
检查输入的value是否是BigUint64Array类型。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | Object | 是 | 待检测对象。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 判断的结果,如果是内置包含的BigUint64Array类型为true,反之为false。 |
**示例:**
```js
var that = new util.types();
var result = that.isBigUint64Array(new BigUint64Array([]));
```
### isModuleNamespaceObject<sup>8+</sup>
isModuleNamespaceObject(value: Object): boolean
检查输入的value是否是Module Namespace Object类型。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | Object | 是 | 待检测对象。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 判断的结果,如果是内置包含的Module Namespace Object类型为true,反之为false。 |
**示例:**
```js
import url from '@ohos.url'
var that = new util.types();
var result = that.isModuleNamespaceObject(url);
```
### isSharedArrayBuffer<sup>8+</sup>
isSharedArrayBuffer(value: Object): boolean
检查输入的value是否是SharedArrayBuffer类型。
**系统能力:** SystemCapability.Utils.Lang
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | Object | 是 | 待检测对象。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| boolean | 判断的结果,如果是内置包含的SharedArrayBuffer类型为true,反之为false。 |
**示例:**
```js
var that = new util.types();
var result = that.isSharedArrayBuffer(new SharedArrayBuffer([]));
```
\ No newline at end of file
...@@ -224,6 +224,7 @@ import window from '@ohos.window'; ...@@ -224,6 +224,7 @@ import window from '@ohos.window';
| isPrivacyMode<sup>7+</sup> | boolean | 是 | 是 | 隐私模式,默认为false。 | | isPrivacyMode<sup>7+</sup> | boolean | 是 | 是 | 隐私模式,默认为false。 |
| isRoundCorner<sup>(deprecated)</sup> | boolean | 是 | 是 | 窗口是否为圆角。默认为false。<br>- **说明:** 从API version 9开始废弃。<br/>- 从 API version 7开始支持 | | isRoundCorner<sup>(deprecated)</sup> | boolean | 是 | 是 | 窗口是否为圆角。默认为false。<br>- **说明:** 从API version 9开始废弃。<br/>- 从 API version 7开始支持 |
| isTransparent<sup>7+</sup> | boolean | 是 | 是 | 窗口是否透明。默认为false。 | | isTransparent<sup>7+</sup> | boolean | 是 | 是 | 窗口是否透明。默认为false。 |
| id<sup>9+</sup> | number | 是 | 否 | 窗口ID,默认值为0.0。 |
## ColorSpace<sup>8+</sup> ## ColorSpace<sup>8+</sup>
......
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
- [GridItem](ts-container-griditem.md) - [GridItem](ts-container-griditem.md)
- [List](ts-container-list.md) - [List](ts-container-list.md)
- [ListItem](ts-container-listitem.md) - [ListItem](ts-container-listitem.md)
- [ListItemGroup](ts-container-listitemgroup.md)
- [Navigator](ts-container-navigator.md) - [Navigator](ts-container-navigator.md)
- [Panel](ts-container-panel.md) - [Panel](ts-container-panel.md)
- [Refresh](ts-container-refresh.md) - [Refresh](ts-container-refresh.md)
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
## 子组件 ## 子组件
包含[ListItem](ts-container-listitem.md)子组件。 包含[ListItem](ts-container-listitem.md)[ListItemGroup](ts-container-listitemgroup.md)子组件。
## 接口 ## 接口
...@@ -44,8 +44,9 @@ List(value:{space?: number | string, initialIndex?: number, scroller?: Scroller} ...@@ -44,8 +44,9 @@ List(value:{space?: number | string, initialIndex?: number, scroller?: Scroller}
| restoreId<sup>8+</sup> | number | - | 组件迁移标识符,标识后的组件在应用迁移时,组件状态会被迁移到被拉起方的同标识组件。<br/>列表组件状态,包括起始位置显示的item序号。 | | restoreId<sup>8+</sup> | number | - | 组件迁移标识符,标识后的组件在应用迁移时,组件状态会被迁移到被拉起方的同标识组件。<br/>列表组件状态,包括起始位置显示的item序号。 |
| lanes<sup>9+</sup> | number \|<br>{<br/>minLength: Length,<br/>maxLength: Length<br/>} | 1 | 以列模式为例(listDirection为Axis.Vertical):<br/>lanes用于决定List组件在交叉轴方向按几列布局,规则如下:<br/>- lanes为指定的数量时,根据指定的数量与List组件的交叉轴宽度来决定每列的宽度;<br/>- lane设置了{minLength,maxLength}时,根据List组件的宽度自适应决定lanes数量(即列数),保证缩放过程中lane的宽度符合{minLength,maxLength}的限制。其中,minLength条件会被优先满足,即优先保证符合ListItem的宽度符合最小宽度限制。例如在列模式下,设置了{minLength: 40vp,maxLength: 60vp},则当List组件宽度为70vp时,ListItem为一列,并且根据alignListItem属性做靠左、居中或者靠右布局;当List组件宽度变化至80vp时,符合两倍的minLength,则ListItem自适应为两列。 | | lanes<sup>9+</sup> | number \|<br>{<br/>minLength: Length,<br/>maxLength: Length<br/>} | 1 | 以列模式为例(listDirection为Axis.Vertical):<br/>lanes用于决定List组件在交叉轴方向按几列布局,规则如下:<br/>- lanes为指定的数量时,根据指定的数量与List组件的交叉轴宽度来决定每列的宽度;<br/>- lane设置了{minLength,maxLength}时,根据List组件的宽度自适应决定lanes数量(即列数),保证缩放过程中lane的宽度符合{minLength,maxLength}的限制。其中,minLength条件会被优先满足,即优先保证符合ListItem的宽度符合最小宽度限制。例如在列模式下,设置了{minLength: 40vp,maxLength: 60vp},则当List组件宽度为70vp时,ListItem为一列,并且根据alignListItem属性做靠左、居中或者靠右布局;当List组件宽度变化至80vp时,符合两倍的minLength,则ListItem自适应为两列。 |
| alignListItem<sup>9+</sup> | ListItemAlign | ListItemAlign.Center | List交叉轴方向宽度大于ListItem交叉轴宽度 * lanes时,ListItem在List交叉轴方向的布局方式,默认为居中。 | | alignListItem<sup>9+</sup> | ListItemAlign | ListItemAlign.Center | List交叉轴方向宽度大于ListItem交叉轴宽度 * lanes时,ListItem在List交叉轴方向的布局方式,默认为居中。 |
| sticky<sup>9+</sup> | StickyStyle | StickyStyle.None | 配合[ListItemGroup](ts-container-listitemgroup.md)组件使用,设置ListItemGroup中header和footer是否要吸顶或吸底,参见StickyStyle的枚举说明。|
- ListItemAlign枚举说明 - ListItemAlign<sup>9+</sup>枚举说明
| 名称 | 描述 | | 名称 | 描述 |
| ------ | -------------------------------------- | | ------ | -------------------------------------- |
...@@ -53,6 +54,15 @@ List(value:{space?: number | string, initialIndex?: number, scroller?: Scroller} ...@@ -53,6 +54,15 @@ List(value:{space?: number | string, initialIndex?: number, scroller?: Scroller}
| Center | ListItem在List中,交叉轴方向居中对齐。 | | Center | ListItem在List中,交叉轴方向居中对齐。 |
| End | ListItem在List中,交叉轴方向尾部对齐。 | | End | ListItem在List中,交叉轴方向尾部对齐。 |
- StickyStyle<sup>9+</sup>枚举说明
| 名称 | 描述 |
| ------ | -------------------------------------- |
| None | ListItemGroup的header不吸顶,footer不吸底。 |
| Header | ListItemGroup的header吸顶。 |
| Footer | ListItemGroup的footer吸底。 |
sticky属性可以设置为 StickyStyle.Header | StickyStyle.Footer 以同时支持header吸顶和footer吸底。
## 事件 ## 事件
......
# ListItemGroup
该组件用来展示列表item分组,宽度默认充满[List](ts-container-list.md)组件,必须配合List组件来使用。
> **说明:**
>
> 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
## 权限列表
## 子组件
包含[ListItem](ts-container-listitem.md)子组件。
## 接口
ListItemGroup(options?: {header?: CustomBuilder, footer?: CustomBuilder, space?: number | string}})
**参数:**
| 参数名 | 参数类型 | 必填 | 参数描述 |
| -------- | -------- | -------- | -------- |
| header | [CustomBuilder](../../ui/ts-types.md#custombuilder8) | 否 | 设置ListItemGroup头部组件。 |
| footer | [CustomBuilder](../../ui/ts-types.md#custombuilder8) | 否 | 设置ListItemGroup尾部组件。 |
| space | number&nbsp;\|&nbsp;string | 否 | 列表项间距。 |
## 属性
| 名称 | 参数类型 | 描述 |
| -------- | -------- | -------- |
| divider | {<br/>strokeWidth:&nbsp;[Length](../../ui/ts-types.md#length),<br/>color?:&nbsp;[ResourceColor](../../ui/ts-types.md#resourcecolor8),<br/>startMargin?:&nbsp;[Length](../../ui/ts-types.md#length),<br/>endMargin?:&nbsp;[Length](../../ui/ts-types.md#length)<br/>}&nbsp;\|&nbsp;null | 用于设置ListItem分割线样式,默认无分割线。<br/>strokeWidth:&nbsp;分割线的线宽。<br/>color:&nbsp;分割线的颜色。<br/>startMargin:&nbsp;分割线距离列表侧边起始端的距离。<br/>endMargin:&nbsp;分割线距离列表侧边结束端的距离。 |
## 示例
```ts
// xxx.ets
function itemHeadBuilder(text: string) {
@Builder function itemHead() {
Text(text)
.fontSize(20)
.backgroundColor(0xAABBCC)
.width("100%")
.padding(10)
}
return itemHead
}
function itemFootBuilder(num: number) {
@Builder function itemFoot() {
Text('' + num + "节课")
.fontSize(16)
.backgroundColor(0xAABBCC)
.width("100%")
.padding(5)
}
return itemFoot
}
@Entry
@Component
struct ListItemGroupExample {
private timetable: any = [
{
title:'星期一',
projects:['语文', '数学', '英语']
},
{
title:'星期二',
projects:['物理', '化学', '生物']
},
{
title:'星期三',
projects:['历史', '地理', '政治']
},
{
title:'星期四',
projects:['美术', '音乐', '体育']
}
]
build() {
Column() {
List({ space: 20 }) {
ForEach(this.timetable, (item) => {
ListItemGroup({ header:itemHeadBuilder(item.title), footer:itemFootBuilder(item.projects.length) }) {
ForEach(item.projects, (project) => {
ListItem() {
Text(project)
.width("100%").height(100).fontSize(20)
.textAlign(TextAlign.Center).backgroundColor(0xFFFFFF)
}
}, item => item)
}
.borderRadius(20)
.divider({ strokeWidth: 1, color: 0xDCDCDC }) // 每行之间的分界线
})
}
.width('90%')
.sticky(StickyStyle.Header|StickyStyle.Footer)
}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
}
}
```
![zh-cn_image_0000001219864159](figures/zh-cn_image_listitemgroup.gif)
...@@ -9,11 +9,11 @@ ...@@ -9,11 +9,11 @@
| 名称 | 支持冒泡 | 功能描述 | | 名称 | 支持冒泡 | 功能描述 |
| ---------------------------------------- | ---- | ---------------------------------------- | | ---------------------------------------- | ---- | ---------------------------------------- |
| onDragStart(callback:&nbsp;(event:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;&nbsp;[CustomBuilder](../../ui/ts-types.md)) | 否 | 第一次拖拽此事件绑定的组件时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>返回值:当前跟手效果所拖拽的对象,用于显示拖拽时的提示组件。<br/>长按150毫秒(ms)可触发拖拽事件。优先级:长按手势配置时间小于等于150毫秒(ms)时,长按手势优先触发,否则拖拽事件优先触发。 | | onDragStart(event:&nbsp;(event?:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;&nbsp;[CustomBuilder](../../ui/ts-types.md)) | 否 | 第一次拖拽此事件绑定的组件时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>返回值:当前跟手效果所拖拽的对象,用于显示拖拽时的提示组件。<br/>长按150毫秒(ms)可触发拖拽事件。优先级:长按手势配置时间小于等于150毫秒(ms)时,长按手势优先触发,否则拖拽事件优先触发。 |
| onDragEnter(callback:&nbsp;(event:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽进入组件范围内时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 | | onDragEnter(event:&nbsp;(event?:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽进入组件范围内时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 |
| onDragMove(callback:&nbsp;(event:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽在组件范围内移动时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 | | onDragMove(event:&nbsp;(event?:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽在组件范围内移动时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 |
| onDragLeave(callback:&nbsp;(event:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽离开组件范围内时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 | | onDragLeave(event:&nbsp;(event?:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 拖拽离开组件范围内时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。<br/>当监听了onDrop事件时,此事件才有效。 |
| onDrop(callback:&nbsp;(event:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。 | | onDrop(event:&nbsp;(event?:&nbsp;DragEvent,&nbsp;extraParams?:&nbsp;string)&nbsp;=&gt;&nbsp;void) | 否 | 绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。<br/>- event:拖拽事件信息,包括拖拽点坐标。<br/>- extraParams:拖拽事件额外信息,详见extraParam类型描述。 |
- extraParam说明<br> - extraParam说明<br>
用于返回组件在拖拽中需要用到的额外信息。 用于返回组件在拖拽中需要用到的额外信息。
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
| 名称 | 支持冒泡 | 描述 | | 名称 | 支持冒泡 | 描述 |
| ---------------------------------------- | ---- | ---------------------------------------- | | ---------------------------------------- | ---- | ---------------------------------------- |
| onHover(callback:&nbsp;(isHover:&nbsp;boolean)&nbsp;=&gt;&nbsp;void) | 否 | 鼠标进入或退出组件时触发该回调。<br/>isHover:表示鼠标是否悬浮在组件上,鼠标进入时为true,&nbsp;退出时为false。 | | onHover(callback:&nbsp;(isHover?:&nbsp;boolean)&nbsp;=&gt;&nbsp;void) | 否 | 鼠标进入或退出组件时触发该回调。<br/>isHover:表示鼠标是否悬浮在组件上,鼠标进入时为true,&nbsp;退出时为false。 |
| onMouse(callback:&nbsp;(event?:&nbsp;MouseEvent)&nbsp;=&gt;&nbsp;void) | 是 | 当前组件被鼠标按键点击时或者鼠标在组件上移动时,触发该回调,event参数包含触发事件时的时间戳、鼠标按键、动作、点击触点在整个屏幕上的坐标和点击触点相对于当前组件的坐标。 | | onMouse(callback:&nbsp;(event?:&nbsp;MouseEvent)&nbsp;=&gt;&nbsp;void) | 是 | 当前组件被鼠标按键点击时或者鼠标在组件上移动时,触发该回调,event参数包含触发事件时的时间戳、鼠标按键、动作、点击触点在整个屏幕上的坐标和点击触点相对于当前组件的坐标。 |
......
...@@ -108,7 +108,7 @@ ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的 ...@@ -108,7 +108,7 @@ ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的
system_core权限涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。 system_core权限涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。
鉴于该类型权限对系统的影响程度非常大,目前暂不向任何应用开放。 鉴于该类型权限对系统的影响程度非常大,目前暂不向任何三方应用开放。
## 权限类型说明 ## 权限类型说明
......
...@@ -13,7 +13,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后 ...@@ -13,7 +13,7 @@ Linux内核移植主要涉及基于linux内核基线合入三方芯片补丁后
### Bootloader ### Bootloader
可以使用芯片厂商自带的Bootloader,或者是开源Uboot等加载内核镜像。比如为支持Hi3516DV300开发板,OpenHarmony引入的开源[Uboot](https://gitee.com/openharmony/device_hisilicon_third_party_uboot) 可以使用芯片厂商自带的Bootloader,或者是开源Uboot等加载内核镜像。比如为支持Hi3516DV300开发板,OpenHarmony引入的开源[Uboot](https://gitee.com/openharmony/third_party_u-boot)
## 适配编译和烧录启动 ## 适配编译和烧录启动
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册