提交 30b52993 编写于 作者: O openharmony_ci 提交者: Gitee

!1078 API 8beta文档新增

Merge pull request !1078 from zengyawen/OpenHarmony-3.1-Beta
......@@ -10,6 +10,8 @@
- [基于TS扩展的声明式开发范式](ui/ui-arkui-ts.md)
- [音频](media/audio.md)
- [IPC与RPC通信](connectivity/ipc-rpc.md)
- [分布式数据服务](database/Readme-CN.md)
- [USB服务](usb/Readme-CN.md)
- [应用事件打点](application-event-logging/hiappevent.md)
- [开发参考](reference/Readme-CN.md)
# 分布式数据服务
- [分布式数据服务概述](database-mdds-overview.md)
- [分布式数据服务开发指导](database-mdds-guidelines.md)
# 分布式数据服务开发指导
## 场景介绍
分布式数据服务主要实现用户设备中应用程序数据内容的分布式同步。当设备1上的应用A在分布式数据库中增、删、改数据后,设备2上的应用A也可以获取到该数据库变化。可在分布式图库、信息、通讯录、文件管理器等场景中使用。
## 接口说明
OpenHarmony系统中的分布式数据服务模块为开发者提供下面几种功能:
**表1** 分布式数据服务关键API功能介绍
| 功能分类 | 接口名称 | 描述 |
| -------- | -------- | -------- |
| 分布式数据库创建。 | createKVManager(config:&nbsp;KVManagerConfig,&nbsp;callback:&nbsp;AsyncCallback&lt;KVManager&gt;):&nbsp;void<br/>createKVManager(config:&nbsp;KVManagerConfig):&nbsp;Promise&lt;KVManager&gt; | 创建一个KVManager对象实例,用于管理数据库对象。 |
| getKVStore&lt;T&nbsp;extends&nbsp;KVStore&gt;(storeId:&nbsp;string,&nbsp;options:&nbsp;Options,&nbsp;callback:&nbsp;AsyncCallback&lt;T&gt;):&nbsp;void<br/>getKVStore&lt;T&nbsp;extends&nbsp;KVStore&gt;(storeId:&nbsp;string,&nbsp;options:&nbsp;Options):&nbsp;Promise&lt;T&gt; | 指定Options和storeId,创建并获取KVStore数据库。 |
| 分布式数据增、删、改、查。 | put(key:&nbsp;string,&nbsp;value:&nbsp;Uint8Array&nbsp;\|&nbsp;string&nbsp;\|&nbsp;number&nbsp;\|&nbsp;boolean,&nbsp;callback:&nbsp;AsyncCallback&lt;void&gt;):&nbsp;void<br/>put(key:&nbsp;string,&nbsp;value:&nbsp;Uint8Array&nbsp;\|&nbsp;string&nbsp;\|&nbsp;number&nbsp;\|&nbsp;boolean):&nbsp;Promise&lt;void&gt; | 插入和更新数据。 |
| delete(key:&nbsp;string,&nbsp;callback:&nbsp;AsyncCallback&lt;void&gt;):&nbsp;void<br/>delete(key:&nbsp;string):&nbsp;Promise&lt;void&gt; | 删除数据。 |
| get(key:&nbsp;string,&nbsp;callback:&nbsp;AsyncCallback&lt;Uint8Array&nbsp;\|&nbsp;string&nbsp;\|&nbsp;boolean&nbsp;\|&nbsp;number&gt;):&nbsp;void<br/>get(key:&nbsp;string):&nbsp;Promise&lt;Uint8Array&nbsp;\|&nbsp;string&nbsp;\|&nbsp;boolean&nbsp;\|&nbsp;number&gt; | 查询数据。 |
| 订阅分布式数据变化。 | on(event:&nbsp;'dataChange',&nbsp;type:&nbsp;SubscribeType,&nbsp;observer:&nbsp;Callback&lt;ChangeNotification&gt;):&nbsp;void<br/>on(event:&nbsp;'syncComplete',&nbsp;syncCallback:&nbsp;Callback&lt;Array&lt;[string,&nbsp;number]&gt;&gt;):&nbsp;void | 订阅数据库中数据的变化。 |
| 分布式数据同步。 | sync(deviceIdList:&nbsp;string[],&nbsp;mode:&nbsp;SyncMode,&nbsp;allowedDelayMs?:&nbsp;number):&nbsp;void | 在手动模式下,触发数据库同步。 |
## 开发步骤
以单版本分布式数据库为例,说明开发步骤。
1. 导入模块。
```
import distributedData from '@ohos.data.distributedData';
```
2. 根据配置构造分布式数据库管理类实例。
1. 根据应用上下文创建KvManagerConfig对象。
2. 创建分布式数据库管理器实例。
以下为创建分布式数据库管理器的代码示例:
```
let kvManager;
try {
const kvManagerConfig = {
bundleName : 'com.example.datamanagertest',
userInfo : {
userId : '0',
userType : distributedData.UserType.SAME_USER_ID
}
}
distributedData.createKVManager(kvManagerConfig, function (err, manager) {
if (err) {
console.log("createKVManager err: " + JSON.stringify(err));
return;
}
console.log("createKVManager success");
kvManager = manager;
});
} catch (e) {
console.log("An unexpected error occurred. Error:" + e);
}
```
3. 获取/创建分布式数据库。
1. 声明需要创建的分布式数据库ID描述。
2. 创建分布式数据库,建议关闭自动同步功能(autoSync:false),需要同步时主动调用sync接口。
以下为创建分布式数据库的代码示例:
```
let kvStore;
try {
const options = {
createIfMissing : true,
encrypt : false,
backup : false,
autoSync : false,
kvStoreType : distributedData.KVStoreType.SINGLE_VERSION,
securityLevel : distributedData.SecurityLevel.S2,
};
kvManager.getKVStore('storeId', options, function (err, store) {
if (err) {
console.log("getKVStore err: " + JSON.stringify(err));
return;
}
console.log("getKVStore success");
kvStore = store;
});
} catch (e) {
console.log("An unexpected error occurred. Error:" + e);
}
```
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 组网设备间同步数据的场景,建议在应用启动时打开分布式数据库,获取数据库的句柄。在该句柄(如上例中的kvStore)的生命周期内无需重复创建数据库,可直接使用句柄对数据库进行数据的插入等操作。
4. 订阅分布式数据变化。
以下为订阅单版本分布式数据库数据变化通知的代码示例:
```
kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) {
console.log("dataChange callback call data: " + JSON.stringify(data));
});
```
5. 将数据写入分布式数据库。
1. 构造需要写入分布式数据库的Key(键)和Value(值)。
2. 将键值数据写入分布式数据库。
以下为将字符串类型键值数据写入分布式数据库的代码示例:
```
const KEY_TEST_STRING_ELEMENT = 'key_test_string';
const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
try {
kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) {
if (err != undefined) {
console.log("put err: " + JSON.stringify(err));
return;
}
console.log("put success");
});
}catch (e) {
console.log("An unexpected error occurred. Error:" + e);
}
```
6. 查询分布式数据库数据。
1. 构造需要从单版本分布式数据库中查询的Key(键)。
2. 从单版本分布式数据库中获取数据。
以下为从分布式数据库中查询字符串类型数据的代码示例:
```
const KEY_TEST_STRING_ELEMENT = 'key_test_string';
const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
try {
kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) {
if (err != undefined) {
console.log("put err: " + JSON.stringify(err));
return;
}
console.log("put success");
kvStore.get(KEY_TEST_STRING_ELEMENT, function (err,data) {
console.log("get success data: " + data);
});
});
}catch (e) {
console.log("An unexpected error occurred. Error:" + e);
}
```
7. 同步数据到其他设备。
1.选择同一组网环境下的设备以及同步模式,进行数据同步。
以下为单版本分布式数据库进行数据同步的代码示例,其中deviceIds可由deviceManager调用getTrustedDeviceListSync()方法得到,1000表示最大延迟时间为1000ms:
```
import deviceManager from '@ohos.distributedHardware.deviceManager';
let devManager;
// create deviceManager
deviceManager.createDeviceManager("bundleName", (err, value) => {
if (!err) {
devManager = value;
}
});
// get deviceIds
let deviceIds = [];
if (devManager != null) {
var deviceList = devManager.getTrustedDeviceListSync();
for (var i = 0; i < deviceList.length; i++) {
deviceIds[i] = deviceList[i].deviceId;
}
}
kvStore.sync(deviceIds, distributedData.SyncMode.PUSH_ONLY, 1000);
```
# 分布式数据服务概述
分布式数据服务(Distributed Data Service,DDS) 为应用程序提供不同设备间数据库的分布式协同能力。通过调用分布式数据接口,应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组,分布式数据服务对属于不同应用的数据进行隔离,保证不同应用之间的数据不能通过分布式数据服务互相访问。在通过可信认证的设备间,分布式数据服务支持应用数据相互同步,为用户提供在多种终端设备上最终一致的数据访问体验。
## 基本概念
- **KV数据模型**
“KV数据模型”是“Key-Value数据模型”的简称,“Key-Value”即“键-值”;其数据以键值对的形式进行组织、索引和存储。
KV数据模型适合不涉及过多数据关系和业务关系的业务数据存储,比SQL数据库存储拥有更好的读写性能,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。分布式数据库也是基于KV数据模型,对外提供KV类型的访问接口。
- **分布式数据库事务性**
分布式数据库事务支持本地事务(和传统数据库的事务概念一致)和同步事务。同步事务是指在设备之间同步数据时,以本地事务为单位进行同步,一次本地事务的修改要么都同步成功,要么都同步失败。
- **分布式数据库一致性**
在分布式场景中一般会涉及多个设备,组网内设备之间看到的数据是否一致称为分布式数据库的一致性。分布式数据库一致性可以分为**强一致性****弱一致性****最终一致性**
- **强一致性**:是指某一设备成功增、删、改数据后,组网内设备对该数据的读取操作都将得到更新后的值。
- **弱一致性**:是指某一设备成功增、删、改数据后,组网内设备可能读取到本次更新数据,也可能读取不到,不能保证在多长时间后每个设备的数据一定是一致的。
- **最终一致性**:是指某一设备成功增、删、改数据后,组网内设备可能读取不到本次更新数据,但在某个时间窗口之后组网内设备的数据能够达到一致状态。
强一致性对分布式数据的管理要求非常高,在服务器的分布式场景可能会遇到。因为移动终端设备的不常在线、以及无中心的特性,分布式数据服务不支持强一致性,只支持最终一致性。
- **分布式数据库同步**
底层通信组件完成设备发现和认证,会通知上层应用程序(包括分布式数据服务)设备上线。收到设备上线的消息后分布式数据服务可以在两个设备之间建立加密的数据传输通道,利用该通道在两个设备之间进行数据同步。
分布式数据服务提供了两种同步方式:**手动同步****自动同步**
- **手动同步:**由应用程序调用sync接口来触发,需要指定同步的设备列表和同步模式。同步模式分为PULL_ONLY(将远端数据拉到本端)、PUSH_ONLY(将本端数据推送到远端)和PUSH_PULL(将本端数据推送到远端同时也将远端数据拉取到本端)。内部接口支持按条件过滤同步,将符合条件的数据同步到远端。
- **自动同步:**包括全量同步和按条件订阅同步。全量同步由分布式数据库自动将本端数据推送到远端,同时也将远端数据拉取到本端来完成数据同步,同步时机包括设备上线、应用程序更新数据等,应用不需要主动调用sync接口;内部接口支持按条件订阅同步,将远端符合订阅条件的数据自动同步到本端。
- **单版本分布式数据库**
单版本是指数据在本地保存是以单个KV条目为单位的方式保存,对每个Key最多只保存一个条目项,当数据在本地被用户修改时,不管它是否已经被同步出去,均直接在这个条目上进行修改。同步也以此为基础,按照它在本地被写入或更改的顺序将当前最新一次修改逐条同步至远端设备。
- **设备协同分布式数据库**
设备协同分布式数据库建立在单版本分布式数据库之上,对应用程序存入的KV数据中的Key前面拼接了本设备的DeviceID标识符,这样能保证每个设备产生的数据严格隔离,底层按照设备的维度管理这些数据,设备协同分布式数据库支持以设备的维度查询分布式数据,但是不支持修改远端设备同步过来的数据。
- **分布式数据库冲突解决策略**
分布式数据库多设备提交冲突场景,在给提交冲突做合并的过程中,如果多个设备同时修改了同一数据,则称这种场景为数据冲突。数据冲突采用默认冲突解决策略(Last-write-wins),基于提交时间戳,取时间戳较大的提交数据,当前不支持定制冲突解决策略。
- **数据库Schema化管理与谓词查询**
单版本数据库支持在创建和打开数据库时指定Schema,数据库根据Schema定义感知KV记录的Value格式,以实现对Value值结构的检查,并基于Value中的字段实现索引建立和谓词查询。
- **分布式数据库备份能力**
提供分布式数据库备份能力,业务通过设置backup属性为true,可以触发分布式数据服务每日备份。当分布式数据库发生损坏,分布式数据服务会删除损坏数据库,并且从备份数据库中恢复上次备份的数据。如果不存在备份数据库,则创建一个新的数据库。同时支持加密数据库的备份能力。
## 运作机制
分布式数据服务支撑OpenHarmony系统上应用程序数据库数据分布式管理,支持数据在相同帐号的多端设备之间相互同步,为用户在多端设备上提供一致的用户体验,分布式数据服务包含五部分:
- **服务接口**
分布式数据服务提供专门的数据库创建、数据访问、数据订阅等接口给应用程序调用,接口支持KV数据模型,支持常用的数据类型,同时确保接口的兼容性、易用性和可发布性。
- **服务组件**
服务组件负责服务内元数据管理、权限管理、加密管理、备份和恢复管理以及多用户管理等、同时负责初始化底层分布式DB的存储组件、同步组件和通信适配层。
- **存储组件**
存储组件负责数据的访问、数据的缩减、事务、快照、数据库加密,以及数据合并和冲突解决等特性。
- **同步组件**
同步组件连结了存储组件与通信组件,其目标是保持在线设备间的数据库数据一致性,包括将本地产生的未同步数据同步给其他设备,接收来自其他设备发送过来的数据,并合并到本地设备中。
- **通信适配层**
通信适配层负责调用底层公共通信层的接口完成通信管道的创建、连接,接收设备上下线消息,维护已连接和断开设备列表的元数据,同时将设备上下线信息发送给上层同步组件,同步组件维护连接的设备列表,同步数据时根据该列表,调用通信适配层的接口将数据封装并发送给连接的设备。
应用程序通过调用分布式数据服务接口实现分布式数据库创建、访问、订阅功能,服务接口通过操作服务组件提供的能力,将数据存储至存储组件,存储组件调用同步组件实现将数据同步,同步组件使用通信适配层将数据同步至远端设备,远端设备通过同步组件接收数据,并更新至本端存储组件,通过服务接口提供给应用程序使用。
**图1** 数据分布式运作示意图
![zh-cn_image_0000001183386164](figures/zh-cn_image_0000001183386164.png)
## 约束与限制
- 分布式数据服务的数据模型仅支持KV数据模型,不支持外键、触发器等关系型数据库中的功能。
- 分布式数据服务支持的KV数据模型规格:
- 设备协同数据库,针对每条记录,Key的长度≤896 Byte,Value的长度&lt;4 MB。
- 单版本数据库,针对每条记录,Key的长度≤1 KB,Value的度&lt;4 MB。
- 每个应用程序最多支持同时打开16个分布式数据库。
- 分布式数据库与本地数据库的使用场景不同,因此开发者应识别需要在设备间进行同步的数据,并将这些数据保存到分布式数据库中。
- 分布式数据服务当前不支持应用程序自定义冲突解决策略。
- 分布式数据服务针对每个应用程序当前的流控机制:KvStore的接口1秒最大访问1000次,1分钟最大访问10000次;KvManager的接口1秒最大访问50次,1分钟最大访问500次。
- 分布式数据库事件回调方法中不允许进行阻塞操作,例如修改UI组件。
......@@ -4,9 +4,9 @@
本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转功能的应用(如下图[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行效果所示),熟悉OpenHarmony应用开发流程。
为确保运行效果,本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
为确保运行效果,本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
![zh-cn_image_0000001172442490](figures/zh-cn_image_0000001172442490.png)
![zh-cn_image_0000001089359413](figures/zh-cn_image_0000001089359413.png)
**表1** 方舟开发框架的对比
......@@ -26,8 +26,10 @@
2. 开发环境配置完成后,请参考[创建OpenHarmony工程](../quick-start/use-wizard-to-create-project.md)创建工程。
- 使用JS语言开发,模板选择Empty Ability,Language选择JS。
- 使用eTS语言开发,模板选择Empty Ability,Language选择eTS。
3. 工程创建完成后,使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行该工程。
完成上述操作后,请参考[使用JS语言开发](../quick-start/start-with-js.md)[使用eTS语言开发](../quick-start/start-with-ets.md)继续下一步的学习。
# 使用eTS语言开发
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 请使用DevEco Studio V3.0.0.601 Beta1及更高版本。本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
>
> 请使用DevEco Studio V3.0.0.601 Beta1及更高版本。本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
## 创建eTS工程
1. 打开DevEco Studio,创建一个新工程,选择模板,如Empty Ability:
![zh-cn_image_0000001172602436](figures/zh-cn_image_0000001172602436.png)
![zh-cn_image_0000001238733799](figures/zh-cn_image_0000001238733799.png)
2. 进入配置工程界面,Project Type选择Application,Language选择eTS,其他参数根据实际需要设置即可。
![zh-cn_image_0000001172283938](figures/zh-cn_image_0000001172283938.png)
![zh-cn_image_0000001238853759](figures/zh-cn_image_0000001238853759.png)
## 编写第一个页面
1. 工程创建完成后,在“Project“窗口,点击entry &gt; src &gt; main &gt; ets &gt; default &gt; pages,打开index.ets文件。
![zh-cn_image_0000001217602267](figures/zh-cn_image_0000001217602267.png)
1. 工程创建完成后,在"Project"窗口,点击entry &gt; src &gt; main &gt; ets &gt; default &gt; pages,打开index.ets文件。
![zh-cn_image_0000001213883165](figures/zh-cn_image_0000001213883165.png)
2. 第一个页面由Flex容器组件、Text组件和Button组件构成。在index.ets中编写并设置页面组件的属性和样式,示例代码如下所示:
```
......@@ -46,15 +48,15 @@
```
3. 使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示:
![zh-cn_image_0000001172123966](figures/zh-cn_image_0000001172123966.png)
![zh-cn_image_0000001168898456](figures/zh-cn_image_0000001168898456.png)
## 创建第二个页面
1.“Project“窗口,打开entry &gt; src &gt; main &gt; etsdefault,右键点击pages文件夹,选择New &gt; eTS Page,命名为details,单击回车键。创建完成后,可以看到pages文件夹下的文件目录结构如下:
![zh-cn_image_0000001172442492](figures/zh-cn_image_0000001172442492.png)
1."Project"窗口,打开entry &gt; src &gt; main &gt; ets &gt; default,右键点击pages文件夹,选择NeweTS Page,命名为details,单击回车键。创建完成后,可以看到pages文件夹下的文件目录结构如下:
![zh-cn_image_0000001214043107](figures/zh-cn_image_0000001214043107.png)
2. 第二个页面由Flex容器组件、Text组件构成。在details.ets中编写并设置页面组件的属性和样式,示例代码如下所示:
```
......@@ -110,7 +112,7 @@
```
2. 再次使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示:
![zh-cn_image_0000001217683805](figures/zh-cn_image_0000001217683805.png)
![zh-cn_image_0000001169221404](figures/zh-cn_image_0000001169221404.png)
恭喜你,至此已成功完成OpenHarmony快速入门-使用eTS语言开发。
# 使用JS语言开发
# 使用JS语言开发(传统代码方式)
为确保运行效果,本文以使用**DevEco Studio 3.0.0.601 Beta1**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
为确保运行效果,本文以使用**DevEco Studio 3.0 Beta2**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta)获取下载链接。
## 编写第一个页面
1. 第一个页面内有一个文本和一个按钮,通过text和button组件来实现。
在“Project“窗口,选择entry &gt; src &gt; main &gt; js &gt; default &gt; pages &gt; index,打开index.hml文件,添加一个文本和一个按钮,示例代码如下:
在"Project"窗口,选择entry &gt; src &gt; main &gt; js &gt; default &gt; pages &gt; index,打开index.hml文件,添加一个文本和一个按钮,示例代码如下:
```
<!-- index.hml -->
<div class="container">
......@@ -18,9 +17,9 @@
<button class="button" type="capsule" value="Next" onclick="launch"></button>
</div>
```
2. 打开index.css文件,设置文本和按钮的样式,示例代码如下:
```
```
/* index.css */
.container {
flex-direction: column; /* 设置容器内的项目纵向排列 */
......@@ -42,19 +41,19 @@
text-color: white;
margin-top: 20px;
}
```
```
3. 使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示:
![zh-cn_image_0000001217683803](figures/zh-cn_image_0000001217683803.png)
![zh-cn_image_0000001167690688](figures/zh-cn_image_0000001167690688.png)
## 创建另一个页面
1.“Project“窗口,打开entry &gt; src &gt; main &gt; js &gt; default,右键点击pages文件夹,选择New &gt; JS Page,命名为details,单击回车键。
1."Project"窗口,打开entry &gt; src &gt; main &gt; js &gt; default,右键点击pages文件夹,选择NewJS Page,命名为details,单击回车键。
创建完成后,可以看到pages文件夹下的文件目录结构如下:
![zh-cn_image_0000001217523751](figures/zh-cn_image_0000001217523751.png)
![zh-cn_image_0000001167850660](figures/zh-cn_image_0000001167850660.png)
2. 打开details.hml文件,添加一个文本,示例代码如下:
```
......@@ -89,7 +88,7 @@
```
// index.js
import router from '@system.router';
export default {
launch() {
router.push ({
......@@ -100,7 +99,7 @@
```
2. 再次使用[预览器](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/previewer-0000001054328973#ZH-CN_TOPIC_0000001056725592__section16523172216252)运行项目,效果如下图所示:
![zh-cn_image_0000001217402315](figures/zh-cn_image_0000001217402315.png)
恭喜你,至此已成功完成OpenHarmony快速入门-使用JS语言开发。
\ No newline at end of file
![zh-cn_image_0000001213130527](figures/zh-cn_image_0000001213130527.png)
恭喜你,至此已成功完成OpenHarmony快速入门-使用JS语言开发。
......@@ -17,14 +17,17 @@
- [音频管理](js-apis-audio.md)
- [音频播放和录制](js-apis-media.md)
- 数据管理
- [文件管理](js-apis-fileio.md)
- [轻量级存储](js-apis-data-storage.md)
- [分布式数据管理](js-apis-distributed-data.md)
- [关系型数据库](js-apis-data-rdb.md)
- [结果集](js-apis-data-resultset.md)
- [DataAbility 谓词](js-apis-data-ability.md)
- [设置数据项名称](js-apis-settings.md)
- 文件管理
- [文件管理](js-apis-fileio.md)
- 账号管理
- [分布式帐号管理](js-apis-distributed-account.md)
- [应用帐号管理](js-apis-appAccount.md)
- 电话服务
- [拨打电话](js-apis-call.md)
- [短信服务](js-apis-sms.md)
......@@ -35,6 +38,7 @@
- 设备管理
- [传感器](js-apis-sensor.md)
- [振动](js-apis-vibrator.md)
- [位置服务](js-apis-geolocation.md)
- [屏幕亮度](js-apis-brightness.md)
- [电量信息](js-apis-battery-info.md)
- [系统电源管理](js-apis-power.md)
......@@ -45,6 +49,7 @@
- [窗口](js-apis-window.md)
- [显示设备属性](js-apis-display.md)
- [升级](js-apis-update.md)
- [USB管理](js-apis-usb.md)
- 基本功能
- [应用上下文](js-apis-basic-features-app-context.md)
- [日志打印](js-apis-basic-features-logs.md)
......@@ -59,5 +64,7 @@
- 语言基础类库
- [获取进程相关的信息](js-apis-process.md)
- [URL字符串解析](js-apis-url.md)
- [字符串编解码](js-apis-util.md)
- [URI字符串解析](js-apis-uri.md)
- [util工具函数](js-apis-util.md)
- [xml文本转换](js-apis-xml.md)
- [启动一个worker](js-apis-worker.md)
\ No newline at end of file
# Ability框架<a name="ZH-CN_TOPIC_0000001176585610"></a>
- [FeatureAbility模块](js-apis-featureAbility.md)
- [ParticleAbility模块](js-apis-particleAbility.md)
- [DataAbilityHelper模块](js-apis-dataAbilityHelper.md)
- [DataUriUtils模块](js-apis-DataUriUtils.md)
- [Bundle模块](js-apis-Bundle.md)
- [CommonEvent模块](js-apis-commonEvent.md)
- [Notification模块](js-apis-notification.md)
- [Context模块](js-apis-Context.md)
\ No newline at end of file
# 账号管理
- **[分布式帐号管理](js-apis-distributed-account.md)**
\ No newline at end of file
# 语言基础类库
- **[获取进程相关的信息](js-apis-process.md)**
- **[URL字符串解析](js-apis-url.md)**
- **[字符串编解码](js-apis-util.md)**
- **[启动一个worker](js-apis-worker.md)**
\ No newline at end of file
# 基本功能
- **[应用上下文](js-apis-basic-features-app-context.md)**
- **[日志打印](js-apis-basic-features-logs.md)**
- **[页面路由](js-apis-basic-features-routes.md)**
- **[弹窗](js-apis-basic-features-pop-up.md)**
- **[应用配置](js-apis-basic-features-configuration.md)**
- **[定时器](js-apis-basic-features-timer.md)**
- **[设置系统时间](js-apis-system-time.md)**
- **[动画](js-apis-basic-features-animator.md)**
- **[应用打点](js-apis-hiappevent.md)**
- **[性能打点](js-apis-bytrace.md)**
\ No newline at end of file
# 网络与连接
- 网络与连接
- [WLAN](js-apis-wifi.md)
......@@ -32,7 +32,7 @@ getRdbStore(config: StoreConfig, version: number, callback: AsyncCallback&lt;Rdb
- 示例:
```
import dataRdb from '@ohos.data.rdb'
const STORE_CONFIG = { name: "RdbTest.db" }
const STORE_CONFIG = { name: "RdbTest.db", encryptKey: new Uint8Array([1, 2])}
const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)"
dataRdb.getRdbStore(STORE_CONFIG, 1, function (err, rdbStore) {
rdbStore.executeSql(SQL_CREATE_TABLE)
......@@ -1043,7 +1043,7 @@ query(rdbPredicates: RdbPredicates, columns: Array&lt;string&gt;, callback: Asyn
| -------- | -------- | -------- | -------- |
| rdbPredicates | [RdbPredicates](#rdbpredicates) | 是 | 表示rdbPredicates的实例对象指定的查询条件。 |
| columns | Array&lt;string&gt; | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 |
| callback | AsyncCallback&lt;[ResultSet](../reference/apis/js-apis-data-resultset.md#resultset)&gt; | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
| callback | AsyncCallback&lt;[ResultSet](js-apis-data-resultset.md)&gt; | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
- 示例:
```
......@@ -1070,7 +1070,7 @@ query(rdbPredicates: RdbPredicates, columns: Array&lt;string&gt;):Promise&lt;Res
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;[ResultSet](../reference/apis/js-apis-data-resultset.md#resultset)&gt; | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 |
| Promise&lt;[ResultSet](../apis/js-apis-data-resultset.md)&gt; | 指定Promise回调函数。如果操作成功,则返回ResultSet对象。 |
- 示例:
```
......@@ -1127,6 +1127,54 @@ executeSql(sql: string, bindArgs: Array&lt;ValueType&gt;):Promise&lt;void&gt;
console.info(TAG + 'delete done.')})
```
### changeEncryptKey<sup>8+</sup>
changeEncryptKey(newEncryptKey:Uint8Array, callback: AsyncCallback&lt;number&gt;):void
修改数据库原有秘钥,结果以callbck形式返回。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| ------------- | --------------------------- | ---- | ------------------------------ |
| newEncryptKey | Uint8Array | 是 | 要变更的数据库秘钥,不能为空。 |
| callback | AsyncCallback&lt;number&gt; | 是 | 指定callback回调函数。 |
- 示例:
```
var newKey = new Uint8Array([1, 2])
rdbStore.changeEncryptKey(newKey, function (ret) {
console.info(TAG + "result is " + ret)})
```
### changeEncryptKey<sup>8+</sup>
changeEncryptKey(newEncryptKey:Uint8Array): Promise&lt;number&gt;
修改数据库原有秘钥,结果以Promise形式返回。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| ------------- | ---------- | ---- | ------------------------------ |
| newEncryptKey | Uint8Array | 是 | 要变更的数据库秘钥,不能为空。 |
- 返回值:
| 类型 | 说明 |
| --------------------- | --------------------- |
| Promise&lt;number&gt; | 指定Promise回调函数。 |
- 示例:
```
var newKey = new Uint8Array([1, 2])
let promise = rdbStore.changeEncryptKey(newKey)
promise.then((ret) => {
console.info(TAG + "result is " + ret)})
```
## StoreConfig
......@@ -1135,6 +1183,7 @@ executeSql(sql: string, bindArgs: Array&lt;ValueType&gt;):Promise&lt;void&gt;
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 数据库文件名。 |
| encryptKey<sup>8+</sup> | Uint8Array | 否 | 对数据库加密的秘钥。在创建时加入,则为初始化秘钥。后续打开时,需要保证其一致性。 |
## ValueType
......
# 数据管理
- **[文件管理](js-apis-fileio.md)**
- **[轻量级存储](js-apis-data-storage.md)**
- **[分布式数据管理](js-apis-distributed-data.md)**
- **[关系型数据库](js-apis-data-rdb.md)**
- **[结果集](js-apis-data-resultset.md)**
- **[DataAbility 谓词](js-apis-data-ability.md)**
\ No newline at end of file
# 设备管理
- **[传感器](js-apis-sensor.md)**
- **[振动](js-apis-vibrator.md)**
- **[屏幕亮度(新)](js-apis-brightness.md)**
- **[电量信息(新)](js-apis-battery-info.md)**
- **[系统电源管理](js-apis-power.md)**
- **[Runninglock锁](js-apis-runninglock.md)**
- **[设备信息](js-apis-device-info.md)**
- **[系统属性](js-apis-system-parameter.md)**
- **[设备管理](js-apis-device-manager.md)**
- **[窗口](js-apis-window.md)**
- **[显示设备属性](js-apis-display.md)**
\ No newline at end of file
# 位置服务
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
```
import geolocation from '@ohos.geolocation';
import { LocationEventListener } from '@ohos.geolocation';
var locationEventListener = new LocationEventListener();
```
## 权限
ohos.permission.LOCATION
ohos.permission.LOCATION_IN_BACKGROUND
## locationEventListener.on('locationChange')
on(type: 'locationChange', request: LocationRequest, callback: Callback&lt;Location&gt;) : void
开启位置变化订阅,并发起定位请求。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 设置事件类型。type为“locationChange”,表示位置变化。 |
| request | LocationRequest | 是 | 设置位置请求参数。 |
| callback | Callback&lt;[Location](#location)&gt; | 是 | 接收位置变化状态变化监听。 |
- 示例:
```
var requestInfo = {'priority': 0x203, 'scenario': 0x300, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};
var locationChange = (location) => {
console.log('locationChanger: data: ' + JSON.stringify(location));
};
locationEventListener.on('locationChange', requestInfo, locationChange);
```
## locationEventListener.off('locationChange')
off(type: 'locationChange', callback?: Callback&lt;Location&gt;) : void
关闭位置变化订阅,并删除对应的定位请求。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 设置事件类型。type为“locationChange”,表示位置变化。 |
| callback | Callback&lt;[Location](#location)&gt; | 否 | 接收位置变化状态变化监听。 |
- 示例:
```
var requestInfo = {'priority': 0x203, 'scenario': 0x300, 'timeInterval': 0, 'distanceInterval': 0, 'maxAccuracy': 0};
var locationChange = (location) => {
console.log('locationChanger: data: ' + JSON.stringify(location));
};
locationEventListener.on('locationChange', requestInfo, locationChange);
locationEventListener.off('locationChange', locationChange);
```
## locationEventListener.on('locationServiceState')
on(type: 'locationServiceState', callback: Callback&lt;boolean&gt;) : void
订阅位置服务状态变化。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 设置事件类型。type为“locationServiceState”,表示位置服务状态。 |
| callback | Callback&lt;boolean&gt; | 是 | 接收位置服务状态变化监听。 |
- 示例:
```
var locationServiceState = (state) => {
console.log('locationServiceState: ' + state);
}
locationEventListener.on('locationServiceState', locationServiceState);
```
## locationEventListener.off('locationServiceState')
off(type: 'locationServiceState', callback: Callback&lt;boolean&gt;) : void
取消订阅位置服务状态变化。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 设置事件类型。type为“locationServiceState”,表示位置服务状态。 |
| callback | Callback&lt;boolean&gt; | 否 | 接收位置服务状态变化监听。 |
- 示例:
```
var locationServiceState = (state) => {
console.log('locationServiceState: state: ' + state);
}
locationEventListener.on('locationServiceState', locationServiceState);
locationEventListener.off('locationServiceState', locationServiceState);
```
## locationEventListener.getCurrentLocation
getCurrentLocation(request: CurrentLocationRequest, callback: AsyncCallback&lt;Location&gt;) : void
获取当前位置,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [CurrentLocationRequest](#currentlocationrequest) | 否 | 设置位置请求参数。 |
| callback | AsyncCallback&lt;[Location](#location)&gt; | 是 | 用来接收位置信息的回调。 |
- 示例:
```
var requestInfo = {'priority': 0x203, 'scenario': 0x300,'maxAccuracy': 0};
var locationChange = (location) => {
console.log('locationChanger: data: ' + JSON.stringify(location));
};
locationEventListener.getCurrentLocation(requestInfo, locationChange);
locationEventListener.getCurrentLocation(locationChange);
```
## locationEventListener.getCurrentLocation
getCurrentLocation(request?: CurrentLocationRequest) : Promise&lt;Location&gt;
获取当前位置,使用Promise方式异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [CurrentLocationRequest](#currentlocationrequest) | 否 | 设置位置请求参数。 |
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;[Location](#location)&gt; | 返回位置信息。 |
- 示例:
```
var requestInfo = {'priority': 0x203, 'scenario': 0x300,'maxAccuracy': 0};
locationEventListener.getCurrentLocation(requestInfo).then((result) => {
console.log('current location: ' + JSON.stringify(result));
});
```
## geolocation.getLastLocation
getLastLocation(callback: AsyncCallback&lt;Location&gt;) : void
获取上一次位置,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;[Location](#location)&gt; | 是 | 用来接收上次位置的回调。 |
- 示例:
```
geolocation.getLastLocation((data) => {
console.log('getLastLocation: data: ' + JSON.stringify(data));
});
```
## geolocation.getLastLocation
getLastLocation() : Promise&lt;Location&gt;
获取上一次位置,使用Promise方式异步返回结果。
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;[Location](#location)&gt; | 返回上次位置信息。 |
- 示例:
```
geolocation.getLastLocation().then((result) => {
console.log('getLastLocation: result: ' + JSON.stringify(result));
});
```
## geolocation.isLocationEnabled
isLocationEnabled(callback: AsyncCallback&lt;boolean&gt;) : void
判断位置服务是否已经打开,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;boolean&gt; | 是 | 用来接收位置服务状态的回调。 |
- 示例:
```
geolocation.isLocationEnabled((data) => {
console.log('isLocationEnabled: data: ' + data);
});
```
## geolocation.isLocationEnabled
isLocationEnabled() : Promise&lt;boolean&gt;
判断位置服务是否已经开启,使用Promise方式异步返回结果。
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;boolean&gt; | 返回位置服务是否可用的状态。 |
- 示例:
```
geolocation.isLocationEnabled().then((result) => {
console.log('promise, isLocationEnabled: ' + result);
});
```
## geolocation.requestEnableLocation
requestEnableLocation(callback: AsyncCallback&lt;boolean&gt;) : void
请求打开位置服务,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;boolean&gt; | 是 | 用来接收位置服务状态的回调。 |
- 示例:
```
geolocation.requestEnableLocation((data) => {
console.log('requestEnableLocation: ' + data);
});
```
## geolocation.requestEnableLocation
requestEnableLocation() : Promise&lt;boolean&gt;
请求打开位置服务,使用Promise方式异步返回结果。
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;boolean&gt; | 返回位置服务是否可用。 |
- 示例:
```
geolocation.requestEnableLocation().then((result) => {
console.log('promise, requestEnableLocation: ' + result);
});
```
## geolocation.isGeoServiceAvailable
isGeoServiceAvailable(callback: AsyncCallback&lt;boolean&gt;) : void
判断(逆)地理编码服务状态,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callback | AsyncCallback&lt;boolean&gt; | 是 | 用来接收地理编码服务状态的回调。 |
- 示例:
```
geolocation.isLocationEnabled((data) => {
console.log('isLocationEnabled: ' + data);
});
```
## geolocation.isGeoServiceAvailable
isGeoServiceAvailable() : Promise&lt;boolean&gt;
判断(逆)地理编码服务状态,使用Promise方式异步返回结果。
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;boolean&gt; | 返回地理编码服务是否可用的状态。 |
- 示例:
```
geolocation.isLocationEnabled().then((result) => {
console.log('promise, isLocationEnabled: ' + result);
});
```
## geolocation.getAddressesFromLocation
getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback&lt;Array&lt;GeoAddress&gt;&gt;) : void
调用逆地理编码服务,将坐标转换为地理描述,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [ReverseGeoCodeRequest](#reversegeocoderequest) | 是 | 设置逆地理编码请求的相关参数。 |
| callback | AsyncCallback&lt;Array&lt;[GeoAddress](#geoaddress)&gt;&gt; | 是 | 设置接收逆地理编码请求的回调参数。 |
- 示例:
```
var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
geolocation.getAddressesFromLocation(reverseGeocodeRequest, (data) => {
console.log('getAddressesFromLocation: ' + JSON.stringify(data));
});
```
## geolocation.getAddressesFromLocation
getAddressesFromLocation(request: ReverseGeoCodeRequest) : Promise&lt;Array&lt;GeoAddress&gt;&gt;;
调用逆地理编码服务,将坐标转换为地理描述,使用Promise方式异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [ReverseGeoCodeRequest](#reversegeocoderequest) | 是 | 设置逆地理编码请求的相关参数。 |
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;Array&lt;[GeoAddress](#geoaddress)&gt;&gt; | 返回地理描述信息。 |
- 示例:
```
var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
geolocation.getAddressesFromLocation(reverseGeocodeRequest, (data) => {
console.log('getAddressesFromLocation: ' + JSON.stringify(data));
});
```
## geolocation.getAddressesFromLocationName
getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback&lt;Array&lt;GeoAddress&gt;&gt;) : void
调用地理编码服务,将地理描述转换为具体坐标,使用callback回调异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [GeoCodeRequest](#geocoderequest) | 是 | 设置地理编码请求的相关参数。 |
| callback | AsyncCallback&lt;Array&lt;[GeoAddress](#geoaddress)&gt;&gt; | 是 | 设置接收地理编码请求的回调参数。 |
- 示例:
```
var geocodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1};
geolocation.getAddressesFromLocationName(geocodeRequest, (data) => {
console.log('getAddressesFromLocationName: ' + JSON.stringify(data));
});
```
## geolocation.getAddressesFromLocationName
getAddressesFromLocationName(request: GeoCodeRequest) : Promise&lt;Array&lt;GeoAddress&gt;&gt;
调用地理编码服务,将地理描述转换为具体坐标,使用Promise方式异步返回结果。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| request | [GeoCodeRequest](#geocoderequest) | 是 | 设置地理编码请求的相关参数。 |
- 返回值:
| 参数名 | 说明 |
| -------- | -------- |
| Promise&lt;Array&lt;[GeoAddress](#geoaddress)&gt;&gt; | 设置接收地理编码请求的回调参数。 |
- 示例:
```
var geocodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1};
geolocation.getAddressesFromLocationName(geocodeRequest).then((result) => {
console.log('getAddressesFromLocationName: ' + JSON.stringify(result));
});
```
## LocationRequestPriority
位置请求中位置信息优先级设置。
| 名称 | 默认值 | 说明 |
| -------- | -------- | -------- |
| UNSET | 0x200 | 表示未设置优先级。 |
| ACCURACY | 0x201 | 表示精度优先。 |
| LOW_POWER | 0x202 | 表示低功耗优先。 |
| FIRST_FIX | 0x203 | 表示快速获取位置优先,如果应用希望快速拿到1个位置,可以将优先级设置为该字段。 |
## LocationRequestScenario
位置请求中定位场景设置。
| 名称 | 默认值 | 说明 |
| -------- | -------- | -------- |
| UNSET | 0x300 | 表示未设置场景信息。 |
| NAVIGATION | 0x301 | 表示导航场景。 |
| TRAJECTORY_TRACKING | 0x302 | 表示运动轨迹记录场景。 |
| CAR_HAILING | 0x303 | 表示打车场景。 |
| DAILY_LIFE_SERVICE | 0x304 | 表示日常服务使用场景。 |
| NO_POWER | 0x305 | 表示无功耗功场景,这种场景下不会主动触发定位,会在其他应用定位时,才给当前应用返回位置。 |
## GeoLocationErrorCode
位置服务中的错误码信息。
| 名称 | 默认值 | 说明 |
| -------- | -------- | -------- |
| INPUT_PARAMS_ERROR | 101 | 表示输入参数错误。 |
| REVERSE_GEOCODE_ERROR | 102 | 表示逆地理编码接口调用失败。 |
| GEOCODE_ERROR | 103 | 表示地理编码接口调用失败。 |
| LOCATOR_ERROR | 104 | 表示定位失败。 |
| LOCATION_SWITCH_ERROR | 105 | 表示定位开关。 |
| LAST_KNOWN_LOCATION_ERROR | 106 | 表示获取上次位置失败。 |
| LOCATION_REQUEST_TIMEOUT_ERROR | 107 | 表示单次定位,没有在指定时间内返回位置。 |
## ReverseGeoCodeRequest
逆地理编码请求接口。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| locale | string | 否 | 指定位置描述信息的语言,“zh”代表中文,“en”代表英文。 |
| latitude | number | 是 | 表示纬度信息,正值表示北纬,负值表示南纬。 |
| longitude | number | 是 | 表示经度信息,正值表示东经,负值表示西经。 |
| maxItems | number | 否 | 指定返回位置信息的最大个数。 |
## GeoCodeRequest
地理编码请求接口。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| locale | string | 否 | 表示位置描述信息的语言,“zh”代表中文,“en”代表英文。 |
| description | number | 是 | 表示位置信息描述,如“上海市浦东新区xx路xx号”。 |
| maxItems | number | 否 | 表示返回位置信息的最大个数。 |
| minLatitude | number | 否 | 表示最小纬度信息,与下面三个参数一起,表示一个经纬度范围。 |
| minLongitude | number | 否 | 表示最小经度信息。 |
| maxLatitude | number | 否 | 表示最大纬度信息。 |
| maxLongitude | number | 否 | 表示最大经度信息。 |
## GeoAddress
地理编码类型。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| latitude | number | 否 | 表示纬度信息,正值表示北纬,负值表示南纬。 |
| longitude | number | 否 | 表示经度信息,正值表示东经,负值表是西经。 |
| locale | string | 否 | 表示位置描述信息的语言,“zh”代表中文,“en”代表英文。 |
| placeName | string | 否 | 表示地区信息。 |
| countryCode | string | 否 | 表示国家码信息。 |
| countryName | string | 否 | 表示国家信息。 |
| administrativeArea | string | 否 | 表示省份区域信息。 |
| subAdministrativeArea | string | 否 | 表示表示子区域信息。 |
| locality | string | 否 | 表示城市信息。 |
| subLocality | string | 否 | 表示子城市信息。 |
| roadName | string | 否 | 表示路名信息。 |
| subRoadName | string | 否 | 表示子路名信息。 |
| premises | string | 否 | 表示门牌号信息。 |
| postalCode | string | 否 | 表示邮政编码信息。 |
| phoneNumber | string | 否 | 表示联系方式信息。 |
| addressUrl | string | 否 | 表示位置信息附件的网址信息。 |
| descriptions | Array&lt;string&gt; | 否 | 表示附加的描述信息。 |
| descriptionsSize | number | 否 | 表示附加的描述信息数量。 |
## LocationRequest
位置信息请求类型。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| priority | [LocationRequestPriority](#locationrequestpriority) | 否 | 表示优先级信息。 |
| scenario | [LocationRequestScenario](#locationrequestscenario) | 是 | 表示场景信息。 |
| timeInterval | number | 否 | 表示上报位置信息的时间间隔。 |
| distanceInterval | number | 否 | 表示上报位置信息的距离间隔。 |
| maxAccuracy | number | 否 | 表示精度信息。 |
## CurrentLocationRequest
当前位置信息请求类型。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| priority | [LocationRequestPriority](#locationrequestpriority) | 否 | 表示优先级信息。 |
| scenario | [LocationRequestScenario](#locationrequestscenario) | 否 | 表示场景信息。 |
| maxAccuracy | number | 否 | 表示精度信息,单位是米。 |
| timeoutMs | number | 否 | 表示超时时间,单位是毫秒,最小为1000毫秒。 |
## Location
位置信息类型。
| 名称 | 参数类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| latitude | number | 是 | 表示纬度信息,正值表示北纬,负值表示南纬。 |
| longitude | number | 是 | 表示经度信息,正值表示东经,负值表是西经。 |
| altitude | number | 是 | 表示高度信息,单位米。 |
| accuracy | number | 是 | 表示精度信息,单位米。 |
| speed | number | 是 | 表示速度信息,单位米每秒。 |
| timeStamp | number | 是 | 表示位置时间戳,UTC格式。 |
| direction | number | 是 | 表示航向信息。 |
| timeSinceBoot | number | 是 | 表示位置时间戳,开机时间格式。 |
| additions | Array&lt;string&gt; | 否 | 附加信息。 |
| additionSize | number | 否 | 附加信息数量。 |
# 媒体
- **[音频管理](js-apis-audio.md)**
- **[音频播放和录制](js-apis-media.md)**
......@@ -20,13 +20,14 @@ import process from '@ohos.process';
| 名称 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| egid | number | 是 | 否 | 获取进程的有效组标识。 |
| euid | number | 是 | 否 | 获取进程的有效用户身份。 |
| gid | number | 是 | 否 | 获取进程的组标识。 |
| uid | number | 是 | 否 | 获取进程的用户标识。 |
| groups | number[] | 是 | 否 | 获取一个带有补充组id的数组。 |
| pid | number | 是 | 否 | 获取当前进程的pid。 |
| ppid | number | 是 | 否 | 获取当前进程的父进程的pid。 |
| egid | number | 是 | 否 | 进程的有效组标识。 |
| euid | number | 是 | 否 | 进程的有效用户身份。 |
| gid | number | 是 | 否 | 进程的组标识。 |
| uid | number | 是 | 否 | 进程的用户标识。 |
| groups | number[] | 是 | 否 | 带有补充组id的数组。 |
| pid | number | 是 | 否 | 当前进程的pid。 |
| ppid | number | 是 | 否 | 当前进程的父进程的pid。 |
| tid<sup>8+</sup> | number | 是 | 否 | 当前进程的tid。 |
## ChildProcess
......@@ -143,6 +144,213 @@ kill函数用来发送信号给子进程,结束指定进程。
```
## process.isIsolatedProcess<sup>8+</sup>
isIsolatedProcess(): boolean
检查进程是否被隔离。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 进程是否隔离 |
- 示例:
```
import process from '@ohos.process';
var result = process.isIsolatedProcess();
```
## process.isAppUid<sup>8+</sup>
isAppUid(v:number): boolean
判断是否特定程序的uid。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | number | 是 | 进程的id。 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 是否是当前app的uid |
- 示例:
```
import process from '@ohos.process';
var result = process.isAppUid(688);
```
## process.is64Bit<sup>8+</sup>
is64Bit(): boolean
判断运行环境是不是64位。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 是不是64位环境 |
- 示例:
```
import process from '@ohos.process';
var ressult = process.is64Bit();
```
## process.getUidForName<sup>8+</sup>
getUidForName(v:string): number
通过进程名获取进程uid。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | string | 是 | 进程name |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 进程的uid |
- 示例:
```
import process from '@ohos.process'
var pres = process.getUidForName("tool")
```
## process.getThreadPriority<sup>8+</sup>
getThreadPriority(v:number): number
根据指定的 TID 获取线程优先级。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| v | number | 是 | 进程的id |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 进程的优先级 |
- 示例:
```
import process from '@ohos.process'
var tid = process。getTid();
var pres = process.getThreadPriority(tid);
```
## process.getStartRealtime<sup>8+</sup>
getStartRealtime() :number
获取从系统启动到进程启动所经过的实时时间(以毫秒为单位)。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 时间 |
- 示例:
```
import process from '@ohos.process';
var realtime = process.getStartRealtime();
```
## process.getAvailableCores<sup>8+</sup>
getAvailableCores() :number[]
获取多核设备上当前进程可用的 CPU 内核。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number[] | 可用内核数 |
- 示例:
```
import process from '@ohos.process';
var result = getAvailableCores();
```
## process.getPastCputime<sup>8+</sup>
getPastCputime() :number
获取进程启动到当前时间的CPU时间(以毫秒为单位)。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 时间 |
- 示例:
```
import process from '@ohos.process';
var result = process.getPastCputime() ;
```
## process.getSystemConfig<sup>8+</sup>
getSystemConfig(name:number): number
用该方法发送signal到指定的进程。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | number | 是 | 系统配置参数名 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| number | 配置信息 |
- 示例:
```
import process from '@ohos.process'
var _SC_ARG_MAX = 0
var pres = process.getSystemConfig(_SC_ARG_MAX)
```
## process.getEnvironmentVar<sup>8+</sup>
getEnvironmentVar(name:string): string
用该方法获取环境变量对应的值。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 环境名 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 环境名对应的value |
- 示例:
```
import process from '@ohos.process'
var pres = process.getEnvironmentVar("PATH")
```
## process.runCmd
runCmd(command: string, options?: { timeout : number, killSignal :number | string, maxBuffer : number }) : ChildProcess
......
......@@ -160,8 +160,6 @@ getResourceManager(bundleName: string): Promise&lt;ResourceManager&gt;
表示当前设备的状态。
### 属性
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| direction | [Direction](#direction) | 是 | 否 | 当前设备屏幕方向 |
......@@ -173,8 +171,6 @@ getResourceManager(bundleName: string): Promise&lt;ResourceManager&gt;
表示设备支持的能力。
### 属性
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| screenDensity | [ScreenDensity](#screendensity) | 是 | 否 | 当前设备屏幕密度 |
......@@ -557,3 +553,55 @@ getPluralString(resId: number, num: number): Promise&lt;string&gt;
});
});
```
### getRawFile<sup>8+</sup>
getRawFile(path: string, callback: AsyncCallback&lt;Uint8Array&gt;): void
用户获取指定路径对应的rawfile文件内容,使用callback形式返回字节数组。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| path | string | 是 | rawfile文件路径 |
| callback | AsyncCallback&lt;Array&lt;Uint8Array&gt;&gt; | 是 | 异步回调,用于返回获取的rawfile文件内容 |
- 示例:
```
resourceManager.getResourceManager((error, mgr) => {
mgr.getRawFile("test.xml", (error, value) => {
if (error != null) {
console.log(value);
} else {
console.log(value);
}
});
});
```
### getRawFile<sup>8+</sup>
getRawFile(path: string): Promise&lt;Uint8Array&gt;
用户获取指定路径对应的rawfile文件内容,使用Promise形式返回字节数组。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| path | string | 是 | rawfile文件路径 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;Array&lt;Uint8Array&gt;&gt; | rawfile文件内容 |
- 示例:
```
resourceManager.getResourceManager((error, mgr) => {
mgr.getRawFile("test.xml").then(value => {
console.log(value);
}).catch(error => {
console.log("getrawfile promise " + error);
});
});
```
# 资源管理
- **[资源管理](js-apis-resource-manager.md)**
- **[国际化-Intl(新)](js-apis-intl.md)**
- **[国际化-I18n(新)](js-apis-i18n.md)**
\ No newline at end of file
# 设置数据项名称
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
本模块提供设置数据项的访问功能相关接口的说明及示例。
## 导入模块
```
import settings from '@ohos.settings';
```
## 权限
## settings.getUri
getUri(name: string): string
获取数据项的URI。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| name | string | 是 | 数据项的名称。 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 数据项的URI。 |
- 示例:
```
// 获取数据项的URI
let urivar = settings.getUri(this.dataName);
```
## settings.getValue
getValue(dataAbilityHelper: DataAbilityHelper, name: string, defValue: string): string
获取数据项的值。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| dataAbilityHelper | [DataAbilityHelper](js-apis-dataAbilityHelper.md) | 是 | 数据管理辅助类。 |
| name | string | 是 | 数据项的名称。 |
| defValue | string | 是 | 默认值。 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 返回数据项的值。 |
- 示例:
```
Button(`register and unregister an observer`)
.onClick(()=>{
// 获取数据项的URI
let urivar = settings.getUri(this.dataName);
// 获取DataAbilityHelper对象
let helper = featureAbility.acquireDataAbilityHelper(urivar);
// 注册观察者,on方法第一个参数写"dataChange",第二个参数为URI,第三个参数为当该URI指向的数据发生改变时触发的回调函数
helper.on("dataChange", urivar, (err) => {
console.log('observer reveive notifychange on success data : ' + JSON.stringify(err))
this.value = settings.getValue(helper, this.dataName, 'this is default value')
})
```
## settings.setValue
setValue(dataAbilityHelper: DataAbilityHelper, name: string, value: string): boolean
设置数据项的值。
使用此方法需获取ohos.permission.WRITE_SYSTEM_SETTING权限。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| dataAbilityHelper | [DataAbilityHelper](js-apis-dataAbilityHelper.md) | 是 | 数据管理辅助类。 |
| name | string | 是 | 数据项的名称。 |
| value | string | 是 | 数据项的具体数值。 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回设置数据项的值是否成功的结果。true表示设置成功,false则表示设置失败。 |
- 示例:
```
Button(`setValue`)
.onClick(()=>{
// 获取数据项的URI
let urivar = settings.getUri(this.dataName);
// 获取DataAbilityHelper对象
let helper = featureAbility.acquireDataAbilityHelper(urivar);
let valueTest = 'valueTest';
// 更新数据库中的值
settings.setValue(helper, this.dataName, valueTest)
})
```
# URI字符串解析
> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
```
import uri from '@ohos.uri'
```
## 权限
## URI
### 属性
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| scheme | string | 是 | 否 | 获取URI&nbsp;的协议部分。 |
| userinfo | string | 是 | 否 | 获取&nbsp;URI&nbsp;的用户信息部分。 |
| host | string | 是 | 否 | 获取&nbsp;URI&nbsp;的主机名部分(不带端口)。 |
| port | string | 是 | 否 | 获取&nbsp;URI&nbsp;的端口部分。 |
| path | string | 是 | 否 | 获取&nbsp;URI&nbsp;的路径部分。 |
| query | string | 是 | 否 | 获取&nbsp;URI&nbsp;的查询部分。 |
| fragment | string | 是 | 否 | 获取&nbsp;URI&nbsp;的片段部分 |
| authority | string | 是 | 否 | 获取此URI的解码权限组件部分。 |
| ssp | string | 是 | 否 | 获取URI的解码方案特定部分。 |
### constructor
constructor(uri: string)
constructor是URI的构造函数。
- 参数:
| 参数名 | 类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
| url | string | 是 | 是 | 入参对象。 |
- 示例:
```
var mm = 'http://username:password@host:8080/directory/file?foo=1&bar=2#fragment';
new URI(mm); // Output 'http://username:password@host:8080/directory/file?foo=1&bar=2#fragment';
new URI('http://username:password@host:8080'); // Output 'http://username:password@host:8080';
```
### toString
toString(): string
返回适用于URL中的查询字符串。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| string | 用于返回网址的字符串序列化。 |
- 示例:
```
const url = new URL('http://username:password@host:8080/directory/file?query=pppppp#qwer=da');
url.toString()
```
### equals
equals(other: URI): boolean
判断此URI是否与其他URI对象相等。
- 参数:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| other | [URI](#uri) | 是 | 需要比较的URI对象。 |
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 用于测试此URI是否与其他URI对象相等。 |
- 示例:
```
const uri = new URI('http://username:password@host:8080/directory/file?query=pppppp#qwer=da');
const uri1 = new URI('http://username:password@host:8080/directory/file?query=pppppp#qwer=da#fragment');
uri.equals(uri1);
```
### checkIsAbsolute
判断此URI是否为绝对URI。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| boolean | 用于说明此URI是否为绝对URI(是否定义了scheme组件)。 |
- 示例:
```
const uri = new URI('http://username:password@www.qwer.com:8080?query=pppppp');
uri.checkIsAbsolute();
```
### normalize
normalize(): URI
规范化此URI的路径。
- 返回值:
| 类型 | 说明 |
| -------- | -------- |
| URI | 用于规范化此URI的路径,并返回一个path被规范化后的URI对象。 |
- 示例:
```
const uri = new URI('http://username:password@www.qwer.com:8080/path/path1/../path2/./path3?query=pppppp');
let uri1 = uri.normalize();
uri1.path;
```
此差异已折叠。
此差异已折叠。
# 接口
- **[Ability框架](js-apis-ability.md)**
- **[资源管理](js-apis-resource.md)**
- **[媒体](js-apis-multmedia.md)**
- **[数据管理](js-apis-data.md)**
- **[账号管理](js-apis-account.md)**
- **[电话服务](js-apis-telephony.md)**
- **[设备管理](js-apis-device-mgmt.md)**
- **[基本功能](js-apis-basic-features.md)**
- **[语言基础类库](js-apis-base-library.md)**
\ No newline at end of file
# 基于JS扩展的类Web开发范式
- [框架说明](js-framework.md)
- [文件组织](js-framework-file.md)
- [js标签配置](js-framework-js-tag.md)
- [app.js](js-framework-js-file.md)
- [语法](js-framework-syntax.md)
- [HML语法参考](js-framework-syntax-hml.md)
- [CSS语法参考](js-framework-syntax-css.md)
- [JS语法参考](js-framework-syntax-js.md)
- [生命周期](js-framework-lifecycle.md)
- [资源限定与访问](js-framework-resource-restriction.md)
- [多语言支持](js-framework-multiple-languages.md)
# 基于JS扩展的类Web开发范式
- [组件](js-components.md)
- [通用](js-components-common.md)
......@@ -118,6 +105,7 @@
- [事件参数](js-components-custom-event-parameter.md)
- [slot插槽](js-components-custom-slot.md)
- [生命周期定义](js-components-custom-lifecycle.md)
- [附录](js-appendix.md)
- [类型说明](js-appendix-types.md)
\ No newline at end of file
- [类型说明](js-appendix-types.md)
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册