diff --git a/zh-cn/application-dev/application-models/Readme-CN.md b/zh-cn/application-dev/application-models/Readme-CN.md index 4997448394fcbe3156e500f41d8186ef0a8d6a01..cff971e2fde4ca9753430f717c52151118b0a126 100644 --- a/zh-cn/application-dev/application-models/Readme-CN.md +++ b/zh-cn/application-dev/application-models/Readme-CN.md @@ -20,7 +20,7 @@ - [AccessibilityExtensionAbility](accessibilityextensionability.md) - [EnterpriseAdminExtensionAbility](enterprise-extensionAbility.md) - [InputMethodExtensionAbility](inputmethodextentionability.md) - - [WindowExtensionAbility](windowextensionability.md) + - [WindowExtensionAbility(仅对系统应用开放)](windowextensionability.md) - 服务卡片开发指导(Stage模型) - [服务卡片概述](service-widget-overview.md) - 开发基于ArkTS UI的卡片 @@ -73,6 +73,7 @@ - [静态订阅公共事件(仅对系统应用开放)](common-event-static-subscription.md) - [取消动态订阅公共事件](common-event-unsubscription.md) - [公共事件发布](common-event-publish.md) + - [移除粘性公共事件(仅对系统应用开放)](common-event-remove-sticky.md) - [后台服务](background-services.md) - 了解线程模型 - [线程模型概述](thread-model-stage.md) diff --git a/zh-cn/application-dev/application-models/application-component-configuration-stage.md b/zh-cn/application-dev/application-models/application-component-configuration-stage.md index 8daf20b110b3b1bedcea6779d129d0129eff3e80..dcea435f3b27aa3df0e37fdca4892a81a763a72d 100644 --- a/zh-cn/application-dev/application-models/application-component-configuration-stage.md +++ b/zh-cn/application-dev/application-models/application-component-configuration-stage.md @@ -88,7 +88,7 @@ **图2** 应用的详情页示意图 ![应用的详情页例图](figures/application_details.jpg) - + - **应用版本声明配置** 应用版本声明需要在工程的AppScope目录下的[app.json5配置文件](../quick-start/app-configuration-file.md)中配置versionCode标签和versionName标签。versionCode用于标识应用的版本号,该标签值为32位非负整数。此数字仅用于确定某个版本是否比另一个版本更新,数值越大表示版本越高。versionName标签标识版本号的文字描述。 diff --git a/zh-cn/application-dev/application-models/common-event-overview.md b/zh-cn/application-dev/application-models/common-event-overview.md index 08445abe772f5863b17dc68cc1cf2c20232128ac..4789a84f3cb05653c0dc5778e5be10445d2098c5 100644 --- a/zh-cn/application-dev/application-models/common-event-overview.md +++ b/zh-cn/application-dev/application-models/common-event-overview.md @@ -7,18 +7,15 @@ OpenHarmony通过CES(Common Event Service,公共事件服务)为应用程 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 -- 系统公共事件:CES内部定义的公共事件,只有系统应用和系统服务才能发布,例如HAP安装,更新,卸载等公共事件。目前支持的系统公共事件详见[系统公共事件列表](../reference/apis/commonEventManager-definitions.md)。 - -- 自定义公共事件:应用自定义一些公共事件用来实现跨进程的事件通信能力。 +- 系统公共事件:CES内部定义的公共事件,当前仅支持系统应用和系统服务发布,例如HAP安装,更新,卸载等公共事件。目前支持的系统公共事件请参见[系统公共事件列表](../reference/apis/commonEventManager-definitions.md)。 +- 自定义公共事件:应用定义的公共事件,可用于实现跨进程的事件通信能力。 公共事件按发送方式可分为:无序公共事件、有序公共事件和粘性公共事件。 -- 无序公共事件:CES转发公共事件时,不考虑订阅者是否接收到,且订阅者接收到的顺序与其订阅顺序无关。 - -- 有序公共事件:CES转发公共事件时,根据订阅者设置的优先级等级,在接收到优先级较高的一个订阅者回复后,再向下一个优先级较低的订阅者转发公共事件。具有相同优先级的订阅者将按随机顺序收到公共事件。 - +- 无序公共事件:CES在转发公共事件时,不考虑订阅者是否接收到该事件,也不保证订阅者接收到该事件的顺序与其订阅顺序一致。 +- 有序公共事件:CES在转发公共事件时,根据订阅者设置的优先级等级,优先将公共事件发送给优先级较高的订阅者,等待其成功接收该公共事件之后再将事件发送给优先级较低的订阅者。如果有多个订阅者具有相同的优先级,则他们将随机接收到公共事件。 - 粘性公共事件:能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。普通的公共事件只能在订阅后发送才能收到,而粘性公共事件的特殊性就是可以先发送后订阅,同时也支持先订阅后发送。发送粘性事件必须是系统应用或系统服务,粘性事件发送后会一直存在系统中,且发送者需要申请`ohos.permission.COMMONEVENT_STICKY`权限,配置方式请参见[配置文件权限声明](../security/accesstoken-guidelines.md#配置文件权限声明)。 diff --git a/zh-cn/application-dev/application-models/common-event-static-subscription.md b/zh-cn/application-dev/application-models/common-event-static-subscription.md index 5cbe408e03c07950ca0e337fb5f76c992765442d..3c77b9fd6e6846773bab03f4616a5592278598e0 100644 --- a/zh-cn/application-dev/application-models/common-event-static-subscription.md +++ b/zh-cn/application-dev/application-models/common-event-static-subscription.md @@ -2,29 +2,37 @@ ## 场景介绍 -静态订阅者在未接收订阅的目标事件时,处于未拉起状态,当系统或应用发布了指定的公共事件后,静态订阅者将被拉起,并执行onReceiveEvent回调,开发者可通过在onReceiveEvent回调中执行业务逻辑,实现当应用接收到特定公共事件时执行业务逻辑的目的。例如,某应用希望在设备开机的时候执行一些初始化任务,那么该应用可以静态订阅开机事件,在收到开机事件后会拉起该应用,然后执行初始化任务。静态订阅是通过配置文件声明和实现继承自StaticSubscriberExtensionAbility的类实现对公共事件的订阅。**需要注意的是,静态订阅公共事件对系统功耗有一定影响,建议谨慎使用**。 +静态订阅者在未接收订阅的目标事件时,处于未拉起状态。当系统或应用发布了指定的公共事件后,静态订阅者将被拉起,并执行[`onReceiveEvent()`](../reference/apis/js-apis-application-staticSubscriberExtensionAbility.md#staticsubscriberextensionabilityonreceiveevent)回调。 + +开发者可以通过在[`onReceiveEvent()`](../reference/apis/js-apis-application-staticSubscriberExtensionAbility.md#staticsubscriberextensionabilityonreceiveevent)回调中执行业务逻辑,实现当应用接收到特定公共事件时执行业务逻辑的目的。例如,应用希望在设备开机时执行一些初始化任务,那么该应用可以静态订阅开机事件,在收到开机事件后会拉起该应用,然后执行初始化任务。 + +静态订阅是通过配置文件声明和实现继承自[`StaticSubscriberExtensionAbility`](../reference/apis/js-apis-application-staticSubscriberExtensionAbility.md)的类实现对公共事件的订阅。 + +> **说明:** +> +> 需要注意的是,静态订阅公共事件对系统功耗有一定影响,建议谨慎使用。 ## 开发步骤 -1. 静态订阅者声明 +1. 静态订阅者声明。 - 声明一个静态订阅者,首先需要在工程中新建一个ExtensionAbility,该ExtensionAbility从StaticSubscriberExtensionAbility派生,其代码实现如下: + 声明一个静态订阅者,首先需要在工程中新建一个ExtensionAbility,该ExtensionAbility从StaticSubscriberExtensionAbility派生。 + + 开发者可以在[`onReceiveEvent()`](../reference/apis/js-apis-application-staticSubscriberExtensionAbility.md#staticsubscriberextensionabilityonreceiveevent)回调中实现业务逻辑。 ```ts import StaticSubscriberExtensionAbility from '@ohos.application.StaticSubscriberExtensionAbility' export default class StaticSubscriber extends StaticSubscriberExtensionAbility { onReceiveEvent(event) { - console.info('onReceiveEvent, event:' + event.event); + console.info('onReceiveEvent, event: ' + event.event); } } ``` - 开发者可以在onReceiveEvent中实现业务逻辑。 - -2. 静态订阅者工程配置 +2. 静态订阅者工程配置。 - 在完成静态订阅者的代码实现后,需要将该订阅者配置到系统的module.json5中,配置形式如下: + 在完成静态订阅者的代码实现后,需要在[module.json5配置文件](../quick-start/module-configuration-file.md)中进行配置订阅者信息。 ```ts { @@ -33,7 +41,7 @@ "extensionAbilities": [ { "name": "StaticSubscriber", - "srcEntry": "./ets/StaticSubscriber/StaticSubscriber.ts", + "srcEntry": "./ets/staticsubscriber/StaticSubscriber.ts", "description": "$string:StaticSubscriber_desc", "icon": "$media:icon", "label": "$string:StaticSubscriber_label", @@ -52,19 +60,20 @@ } ``` - 上述json文件主要关注以下字段: + 其中部分字段解释如下: - - srcEntry : 表示ExtensionAbility的入口文件路径,即步骤2中声明的静态订阅者所在的文件路径 + - srcEntry:表示ExtensionAbility的入口文件路径,即步骤2中声明的静态订阅者所在的文件路径。 - - type: 表示ExtensionAbility的类型,对于静态订阅者需要声明为“staticSubscriber” + - type:表示ExtensionAbility的类型,对于静态订阅者需要声明为`staticSubscriber`。 - - metadata: 表示ExtensionAbility的二级配置文件信息。由于不同的ExtensionAbility类型其配置信息不尽相同,因此需要使用不同的config文件表示其具体配置信息。 - - name:表示ExtensionAbility的类型名称,对于静态订阅类型,name必须声明为“ohos.extension.staticSubscriber”,否则无法识别为静态订阅者; - - resource: 字段表示ExtensionAbility的配置信息路径,由开发者自行定义,在本例中表示路径为“resources/base/profile/subscribe.json"。 + - metadata:表示ExtensionAbility的二级配置文件信息。由于不同的ExtensionAbility类型其配置信息不尽相同,因此需要使用不同的config文件表示其具体配置信息。 + - name:表示ExtensionAbility的类型名称,对于静态订阅类型,name必须声明为`ohos.extension.staticSubscriber`,否则无法识别为静态订阅者。 + - resource:字段表示ExtensionAbility的配置信息路径,由开发者自行定义,在本例中表示路径为`resources/base/profile/subscribe.json`。 - metadata指向的二级配置文件的通常形式如下: - ```ts +3. 配置metadata指向的二级配置文件。 + + ```json { "commonEvents": [ { @@ -78,28 +87,32 @@ } ``` - 需要注意二级配置文件必须按照此形式进行声明,否则会无法正确识别。下面对字段进行介绍: - - - name: 静态订阅ExtensionAbility的名称,需要和module.json5中声明的ExtensionAbility的name一致 + 需要注意二级配置文件必须按照此形式进行声明,否则会无法正确识别。部分字段解释如下: - - permission:订阅者要求的发布者需要具备的权限,对于发布了目标事件但不具备permission中声明的权限的发布者将被视为非法事件不予发布 + - name: 静态订阅ExtensionAbility的名称,需要和module.json5中声明的ExtensionAbility的name一致。 + - permission:订阅者要求的发布者需要具备的权限,对于发布了目标事件但不具备permission中声明的权限的发布者将被视为非法事件不予发布。 + - events:订阅的目标事件列表。 - - events: 订阅的目标事件列表 +4. 修改设备的[预置配置文件](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/preinstall-config/install_list_permissions.json)。[预置配置文件](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/preinstall-config/install_list_permissions.json)在设备上的路径为`/system/etc/app/install_list_permission.json`,设备开机启动时会读取该配置文件,在应用安装会对在文件中配置的`allowCommonEvent`公共事件类型进行授权。预授权配置文件字段内容包括`bundleName`、`app_signature`和`allowCommonEvent`。 -3. 修改设备系统配置文件 + - `bundleName`字段配置为应用的Bundle名称。 + - `app_signature`字段配置为应用的指纹信息。指纹信息的配置参见[应用特权配置指南](../../device-dev/subsystems/subsys-app-privilege-config-guide.md#install_list_capabilityjson中配置)。 + - `allowCommonEvent`字段配置为允许静态广播拉起的公共事件项。 - 修改设备系统配置文件 **/system/etc/app/install_list_capability.json**,将静态订阅应用者的包名添加至该json文件中即可。 + > **说明**:当前仅支持预置应用配置该文件。 - ```json - { - "install_list": [ - { - "bundleName": "ohos.extension.staticSubscriber", - "allowCommonEvent": ["usual.event.A", "usual.event.B"], - } - ] - } + ```json + [ + ... + { + "bundleName": "com.example.myapplication", // Bundle名称 + "app_signature": ["****"], // 指纹信息 + "allowCommonEvent": ["usual.event.A", "usual.event.B"], // 允许静态广播拉起的公共事件项 + ] + } + ] ``` + ## 相关示例 针对StaticSubscriberExtensionAbility开发,可参考如下实例: diff --git a/zh-cn/application-dev/application-models/hop-cross-device-migration.md b/zh-cn/application-dev/application-models/hop-cross-device-migration.md index ae9eb5bd2f164f527441958c57ddb6544e02061a..a7b82f117b886ab995e22cfb90c10d4a912f9c39 100644 --- a/zh-cn/application-dev/application-models/hop-cross-device-migration.md +++ b/zh-cn/application-dev/application-models/hop-cross-device-migration.md @@ -16,7 +16,7 @@ 跨端迁移流程如下图所示。 - **图1** 跨端迁移流程图   +**图1** 跨端迁移流程图 ![hop-cross-device-migration](figures/hop-cross-device-migration.png) @@ -47,60 +47,38 @@ ## 开发步骤 -1. 在module.json5配置数据同步权限,示例代码如下。 - +1. 需要申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参见[配置文件权限声明](../security/accesstoken-guidelines.md#配置文件权限声明)。 + +2. 同时需要在应用首次启动时弹窗向用户申请授权,使用方式请参见[向用户申请授权](../security/accesstoken-guidelines.md#向用户申请授权)。 + +3. 在配置文件中配置跨端迁移相关标签字段。 + + 配置应用支持迁移 + 在module.json5中配置continuable标签:true表示支持迁移,false表示不支持,默认为false。配置为false的UIAbility将被系统识别为无法迁移。 + + ```json { "module": { - "requestPermissions":[ - { - "name" : "ohos.permission.DISTRIBUTED_DATASYNC", + ... + "abilities": [ + { + ... + "continuable": true, } ] } } ``` -2. 在配置文件中配置跨端迁移相关标签字段。 - - 配置应用支持迁移 - 在module.json5中配置continuable标签:true表示支持迁移,false表示不支持,默认为false。配置为false的UIAbility将被系统识别为无法迁移。 - - - ```json - { - "module": { - // ... - "abilities": [ - { - // ... - "continuable": true, - } - ] - } - } - ``` - - 根据需要配置应用启动模式类型,配置详情请参照[UIAbility组件启动模式](uiability-launch-type.md)。 - -3. 申请数据同步权限,弹框示例代码。 - - ```ts - requestPermission() { - let context = this.context - let permissions: Array = ['ohos.permission.DISTRIBUTED_DATASYNC'] - context.requestPermissionsFromUser(permissions).then((data) => { - console.info("Succeed to request permission from user with data: "+ JSON.stringify(data)) - }).catch((error) => { - console.info("Failed to request permission from user with error: "+ JSON.stringify(error)) - }) - } - ``` + 根据需要配置应用启动模式类型,配置详情请参照[UIAbility组件启动模式](uiability-launch-type.md)。 4. 在发起端UIAbility中实现[onContinue()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue)接口。 - 当应用触发迁移时,[onContinue()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue)接口在发起端被调用,开发者可以在该接口中保存迁移数据,实现应用兼容性检测,决定是否支持此次迁移。 + 当应用触发迁移时,[onContinue()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue)接口在发起端被调用,开发者可以在该接口中保存迁移数据,实现应用兼容性检测,决定是否支持此次迁移。 - 保存迁移数据:开发者可以将要迁移的数据通过键值对的方式保存在wantParam中。 - + - 应用兼容性检测:开发者可以通过从wantParam中获取目标应用的版本号与本应用版本号做兼容性校验。 - + - 迁移决策:开发者可以通过onContinue接口的返回值决定是否支持此次迁移,返回值信息见[接口说明](#接口说明)。 示例如下: diff --git a/zh-cn/application-dev/application-models/inputmethodextentionability.md b/zh-cn/application-dev/application-models/inputmethodextentionability.md index 3350ac24a73225a2dfe7a38dcf2d3b845d13efc6..c5be91b31631b8fae7aa731ce7c0823dc4ff5af9 100644 --- a/zh-cn/application-dev/application-models/inputmethodextentionability.md +++ b/zh-cn/application-dev/application-models/inputmethodextentionability.md @@ -16,6 +16,7 @@ 服务被首次创建时触发该回调,开发者可以在此进行一些初始化的操作,例如注册公共事件监听等。 > **说明:** + > > 如果服务已创建,再次启动该InputMethodExtensionAbility不会触发onCreate()回调。 - **onDestroy** @@ -343,7 +344,7 @@ ```ts { "module": { - // ... + ... "extensionAbilities": [ { "description": "inputMethod", diff --git a/zh-cn/application-dev/application-models/itc-with-worker.md b/zh-cn/application-dev/application-models/itc-with-worker.md index 994e3734307372051c32a2bae272bcb8b2977424..912654e0fdf29d5f472d588ca24c947b1cb58a93 100644 --- a/zh-cn/application-dev/application-models/itc-with-worker.md +++ b/zh-cn/application-dev/application-models/itc-with-worker.md @@ -10,13 +10,13 @@ Worker的开发步骤如下: 1. 在工程的[模块级build-profile.json5](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-building-configuration-0000001218440654#section6887184182020)文件的buildOption属性中添加配置信息。 ```ts - "buildOption": { - "sourceOption": { - "workers": [ - "./src/main/ets/workers/worker.ts" - ] - } + "buildOption": { + "sourceOption": { + "workers": [ + "./src/main/ets/workers/worker.ts" + ] } + } ``` 2. 根据build-profile.json5中的配置创建对应的worker.ts文件。 @@ -28,9 +28,9 @@ Worker的开发步骤如下: // 处理来自主线程的消息 parent.onmessage = function(message) { - console.info("onmessage: " + message) - // 发送消息到主线程 - parent.postMessage("message from worker thread.") + console.info("onmessage: " + message) + // 发送消息到主线程 + parent.postMessage("message from worker thread.") } ``` @@ -47,10 +47,10 @@ Worker的开发步骤如下: // 处理来自worker线程的消息 wk.onmessage = function(message) { - console.info("message from worker: " + message) + console.info("message from worker: " + message) - // 根据业务按需停止worker线程 - wk.terminate() + // 根据业务按需停止worker线程 + wk.terminate(); } ``` @@ -58,23 +58,22 @@ Worker的开发步骤如下: ```ts import worker from '@ohos.worker'; - + let wk = new worker.ThreadWorker("../workers/worker.ts"); - + // 发送消息到worker线程 wk.postMessage("message from main thread.") - + // 处理来自worker线程的消息 wk.onmessage = function(message) { - console.info("message from worker: " + message) - - // 根据业务按需停止worker线程 - wk.terminate() + console.info("message from worker: " + message) + + // 根据业务按需停止worker线程 + wk.terminate(); } ``` -**说明:** - -- build-profile.json5中配置的worker.ts的相对路径都为`./src/main/ets/workers/worker.ts`时,在Stage模型下创建worker需要传入路径`entry/ets/workers/worker.ts`;在FA模型下创建worker需要传入路径`../workers/worker.ts`。 - -- 主线程与Worker线程间支持的数据类型参考[序列化支持类型](../reference/apis/js-apis-worker.md#序列化支持类型)。 +> **说明:** +> +> - build-profile.json5中配置的worker.ts的相对路径都为`./src/main/ets/workers/worker.ts`时,在Stage模型下创建worker需要传入路径`entry/ets/workers/worker.ts`;在FA模型下创建worker需要传入路径`../workers/worker.ts`。 +> - 主线程与Worker线程间支持的数据类型参考[序列化支持类型](../reference/apis/js-apis-worker.md#序列化支持类型)。 diff --git a/zh-cn/application-dev/application-models/process-model-stage.md b/zh-cn/application-dev/application-models/process-model-stage.md index 0717b4c02d45622ddb2606ee7f0b6c6f0bda4ecf..cf030e0ba0931f75a7ebd64757d8a355b8df36a1 100644 --- a/zh-cn/application-dev/application-models/process-model-stage.md +++ b/zh-cn/application-dev/application-models/process-model-stage.md @@ -1,16 +1,17 @@ # 进程模型概述 -OpenHarmony的进程模型如下图所示: +OpenHarmony的进程模型如下图所示。 -- 应用中(同一Bundle名称)的所有UIAbility、ServiceExtensionAbility、DataShareExtensionAbility运行在同一个独立进程中,即图中绿色部分的“Main Process”。 +- 应用中(同一Bundle名称)的所有UIAbility、ServiceExtensionAbility、DataShareExtensionAbility运行在同一个独立进程中,如下图中绿色部分的“Main Process”。 -- 应用中(同一Bundle名称)的同一类型ExtensionAbility(除ServiceExtensionAbility和DataShareExtensionAbility外)运行在一个独立进程中,即图中蓝色部分的“FormExtensionAbility Process”、“InputMethodExtensionAbility Process”、其他ExtensionAbility Process。 +- 应用中(同一Bundle名称)的同一类型ExtensionAbility(除ServiceExtensionAbility和DataShareExtensionAbility外)运行在一个独立进程中,如下图中蓝色部分的“FormExtensionAbility Process”、“InputMethodExtensionAbility Process”、其他ExtensionAbility Process。 -- WebView拥有独立的渲染进程,即图中黄色部分的“Render Process”。 +- WebView拥有独立的渲染进程,如下图中黄色部分的“Render Process”。 - **图1** 进程模型示意图 + +**图1** 进程模型示意图 ![process-model](figures/process-model.png) > 说明: @@ -20,7 +21,7 @@ OpenHarmony的进程模型如下图所示: 在上述模型基础上,对于系统应用可以通过申请多进程权限(如下图所示),为指定HAP配置一个自定义进程名,该HAP中的UIAbility、DataShareExtensionAbility、ServiceExtensionAbility就会运行在自定义进程中。不同的HAP可以通过配置不同的进程名运行在不同进程中。 - **图2** 多进程示意图 +**图2** 多进程示意图 ![multi-process](figures/multi-process.png) @@ -29,4 +30,4 @@ OpenHarmony的进程模型如下图所示: - [公共事件机制](common-event-overview.md):多用于一对多的通信场景,公共事件发布者可能存在多个订阅者同时接收事件。 -- [后台服务机制](background-services.md):当前主要通过[ServiceExtensionAbility](serviceextensionability.md)的能力实现。 +- [后台服务机制](background-services.md):通过[ServiceExtensionAbility](serviceextensionability.md)的能力实现。 diff --git a/zh-cn/application-dev/application-models/stage-model-development-overview.md b/zh-cn/application-dev/application-models/stage-model-development-overview.md index 7bd15181225bd761cdc0fb52e9759bbb87522f92..7854471b8c8884033b7905b862fe36861e4fc643 100644 --- a/zh-cn/application-dev/application-models/stage-model-development-overview.md +++ b/zh-cn/application-dev/application-models/stage-model-development-overview.md @@ -17,7 +17,7 @@ - ExtensionAbility组件是一种面向特定场景的应用组件。开发者并不直接从ExtensionAbility派生,而是需要使用ExtensionAbility的派生类。目前ExtensionAbility有用于卡片场景的FormExtensionAbility,用于输入法场景的InputMethodExtensionAbility,用于闲时任务场景的WorkSchedulerExtensionAbility等多种派生类,这些派生类都是基于特定场景提供的。例如,用户在桌面创建应用的卡片,需要应用开发者从FormExtensionAbility派生,实现其中的回调函数,并在配置文件中配置该能力。ExtensionAbility派生类实例由用户触发创建,并由系统管理生命周期。在Stage模型上,普通应用开发者不能开发自定义服务,而需要根据自身的业务场景通过ExtensionAbility的派生类来实现。 - [WindowStage](../windowmanager/application-window-stage.md) - 每个UIAbility类实例都会与一个WindowStage类实例绑定,该类提供了应用进程内窗口管理器的作用。它包含一个主窗口(Window)。也就是说UIAbility通过WindowStage持有了一个主窗口,该主窗口为ArkUI提供了绘制区域。 + 每个UIAbility类实例都会与一个WindowStage类实例绑定,该类提供了应用进程内窗口管理器的作用。它包含一个主窗口。也就是说UIAbility通过WindowStage持有了一个主窗口,该主窗口为ArkUI提供了绘制区域。 - [Context](application-context-stage.md) diff --git a/zh-cn/application-dev/application-models/thread-model-stage.md b/zh-cn/application-dev/application-models/thread-model-stage.md index b05ced9d92e3d3578e2b29de3aea52fd4ea99718..57ac44d934cee35e9b57e1a67bd8dd8047fa239a 100644 --- a/zh-cn/application-dev/application-models/thread-model-stage.md +++ b/zh-cn/application-dev/application-models/thread-model-stage.md @@ -2,19 +2,20 @@ 在OpenHarmony应用中,每个进程都会有一个主线程,主线程具有以下职责: -1. 执行UI绘制; -2. 管理主线程的ArkTS引擎实例,使多个UIAbility组件能够运行在其之上; -3. 管理其他线程(例如Worker线程)的ArkTS引擎实例,例如启动和终止其他线程; -4. 分发交互事件; -5. 处理应用代码的回调,包括事件处理和生命周期管理; -6. 接收Worker线程发送的消息; +1. 执行UI绘制。 +2. 管理主线程的ArkTS引擎实例,使多个UIAbility组件能够运行在其之上。 +3. 管理其他线程(例如Worker线程)的ArkTS引擎实例,例如启动和终止其他线程。 +4. 分发交互事件。 +5. 处理应用代码的回调,包括事件处理和生命周期管理。 +6. 接收Worker线程发送的消息。 除了主线程外,还有一类独立的Worker线程,用于执行耗时操作。Worker线程在主线程中创建,与主线程相互独立,但不能直接操作UI。最多可以创建7个Worker线程。 ![thread-model-stage](figures/thread-model-stage.png) -基于OpenHarmony的线程模型,不同的业务功能运行在不同的线程上,业务功能的交互就需要线程间通信。同一个进程内,线程间通信目前主要有Emitter和Worker两种方式,其中Emitter主要适用于线程间的事件同步, Worker主要用于新开一个线程执行耗时任务。 +基于OpenHarmony的线程模型,不同的业务功能运行在不同的线程上,业务功能的交互就需要线程间通信。同一个进程内,线程间通信目前主要有Emitter和Worker两种方式,其中Emitter主要适用于线程间的事件同步,Worker主要用于新开一个线程执行耗时任务。 > **说明:** > -> - Stage模型只提供了主线程和Worker线程,Emitter主要用于主线程内或者主线程和Worker线程的事件同步。 -> - 执行`hdc shell`命令,进入设备的shell命令行。在shell命令行中,执行`ps -p -T`命令,可以查看指定应用进程的线程信息。其中,``为需要指定的应用进程的进程ID。 +> - Stage模型只提供了主线程和Worker线程,Emitter主要用于主线程和Worker线程、Worker线程和Worker线程之间的事件同步。 +> - UIAbility组件与UI均在主线程中,他们之间的数据同步请参见[UIAbility组件与UI的数据同步](uiability-data-sync-with-ui.md)。 +> - 执行`hdc shell`命令,进入设备的shell命令行。在shell命令行中,执行`ps -p -T`命令,可以查看指定应用进程的线程信息。其中,``为需要指定的应用进程的[进程ID](process-model-stage.md)。 diff --git a/zh-cn/application-dev/notification/figures/zh-cn_image_0000001466462305.png b/zh-cn/application-dev/notification/figures/zh-cn_image_0000001466462305.png index 2c580f75dc86159b4088e54d3f83e163fd352f6d..f879ad7ef01a39b5f18af8abea3f7f1842b2b446 100644 Binary files a/zh-cn/application-dev/notification/figures/zh-cn_image_0000001466462305.png and b/zh-cn/application-dev/notification/figures/zh-cn_image_0000001466462305.png differ diff --git a/zh-cn/application-dev/notification/notification-enable.md b/zh-cn/application-dev/notification/notification-enable.md index 84680e0a4f18b02b7ec7da8714918dcb6a840d9c..45d3345c19810f5e0c2dfce772cf1e9a378d8339 100644 --- a/zh-cn/application-dev/notification/notification-enable.md +++ b/zh-cn/application-dev/notification/notification-enable.md @@ -1,15 +1,15 @@ # 使能通知开关 -应用需要开启通知开关才能发送通知。开发者可以在通知发布前调用[requestEnableNotification()](../reference/apis/js-apis-notificationManager.md#notificationrequestenablenotification)方法,弹窗让用户选择是否开启使能开关,仅弹窗一次,后续调用该接口不再弹窗。 +应用需要开启通知开关才能发送通知。开发者可以在通知发布前调用[requestEnableNotification()](../reference/apis/js-apis-notificationManager.md#notificationmanagerrequestenablenotification)方法,弹窗让用户选择是否开启使能开关,仅弹窗一次,后续调用该接口不再弹窗。 - **图1** 使能通知开关示意图 + **图1** 使能通知开关示意图 ![zh-cn_image_0000001416585590](figures/zh-cn_image_0000001416585590.png) - 点击“允许”后,则表示允许应用发送通知。 -- 点击“取消”后,再次调用[requestEnableNotification()](../reference/apis/js-apis-notificationManager.md#notificationrequestenablenotification)方法,则不再弹窗。此时如需要手动使能通知开关,操作步骤如下所示。 +- 点击“取消”后,再次调用[requestEnableNotification()](../reference/apis/js-apis-notificationManager.md#notificationmanagerrequestenablenotification)方法,则不再弹窗。此时如需要手动使能通知开关,操作步骤如下所示。 | ①从设备左上方下拉,进入通知界面 | ②点击右上角“设置”图标,进入通知界面,找到需要打开通知开关的应用 | ③打开“允许通知”开关 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | @@ -34,16 +34,16 @@ 1. 导入NotificationManager模块。 ```ts - import NotificationManager from '@ohos.notificationManager'; + import notificationManager from '@ohos.notificationManager'; ``` 2. 请求发送通知的许可。 ```ts - NotificationManager.requestEnableNotification().then(() => { + notificationManager.requestEnableNotification().then(() => { console.info(`[ANS] requestEnableNotification success`); }).catch((err) => { - console.error(`[ANS] requestEnableNotification failed, errCode[${err}]`); + console.error(`[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`); }); ``` diff --git a/zh-cn/application-dev/notification/notification-overview.md b/zh-cn/application-dev/notification/notification-overview.md index eb3bd330178878989b2375403198d7eab15c1e9e..ec0a9eef7f707fd70fcf3b391203271b77e4f1f6 100644 --- a/zh-cn/application-dev/notification/notification-overview.md +++ b/zh-cn/application-dev/notification/notification-overview.md @@ -13,7 +13,7 @@ - 显示当前正在进行的事件,如下载等。 -OpenHarmony通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,如基础类型通知、进度条类型通知、后台代理提醒。 +OpenHarmony通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,例如基础类型通知、进度条类型通知、后台代理提醒。 ## 通知业务流程 @@ -24,6 +24,7 @@ OpenHarmony通过ANS(Advanced Notification Service,通知系统服务)对 系统应用还支持通知相关配置,如使能开关、配置参数由系统配置发起请求,发送到通知子系统存储到内存和数据库。 +**图1** 通知业务流程 ![zh-cn_image_0000001466582017](figures/zh-cn_image_0000001466582017.png) ## 相关实例 diff --git a/zh-cn/application-dev/notification/notification-subscription.md b/zh-cn/application-dev/notification/notification-subscription.md index 739ae33ed6461c3cf9a26696d6592aea81f3b95c..33db2db09dc8ca0489f79ce12d6c2fff14789138 100644 --- a/zh-cn/application-dev/notification/notification-subscription.md +++ b/zh-cn/application-dev/notification/notification-subscription.md @@ -20,64 +20,64 @@ **表2** 通知订阅回调接口介绍 -| | | -| -------- | -------- | | **接口名** | **描述** | -| onConsume?:(data: SubscribeCallbackData) => void | 通知回调。 | -| onCancel?:(data: SubscribeCallbackData) => void | 通知取消回调。 | -| onUpdate?:(data: NotificationSortingMap) => void | 通知排序更新回调。 | -| onConnect?:() => void; | 订阅成功回调。 | -| onDisconnect?:() => void; | 取消订阅回调。 | -| onDestroy?:() => void | 与通知子系统断开回调。 | +| -------- | -------- | +| onConsume?:(data: SubscribeCallbackData) => void | 通知回调。 | +| onCancel?:(data: SubscribeCallbackData) => void | 通知取消回调。 | +| onUpdate?:(data: NotificationSortingMap) => void | 通知排序更新回调。 | +| onConnect?:() => void; | 订阅成功回调。 | +| onDisconnect?:() => void; | 取消订阅回调。 | +| onDestroy?:() => void | 与通知子系统断开回调。 | | onDoNotDisturbDateChange?:(mode: notification.DoNotDisturbDate) => void | 免打扰时间选项变更回调。 | -| onEnabledNotificationChanged?:(callbackData: EnabledNotificationCallbackData) => void | 通知开关变更回调。 | +| onEnabledNotificationChanged?:(callbackData: EnabledNotificationCallbackData) => void | 通知开关变更回调。 | ## 开发步骤 -1. 申请`ohos.permission.NOTIFICATION_CONTROLLER`权限,配置方式请参阅[访问控制授权申请指导](../security/accesstoken-guidelines.md)。 +1. 申请`ohos.permission.NOTIFICATION_CONTROLLER`权限,配置方式请参见[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)。 2. 导入通知订阅模块。 ```ts - import NotificationSubscribe from '@ohos.notificationSubscribe'; + import notificationSubscribe from '@ohos.notificationSubscribe'; ``` 3. 创建订阅者对象。 ```ts let subscriber = { - onConsume: function (data) { - let req = data.request; - console.info('[ANS] onConsume callback req.id: ' + req.id); - }, - onCancel: function (data) { - let req = data.request; - console.info('[ANS] onCancel callback req.id: : ' + req.id); - }, - onUpdate: function (data) { - console.info('[ANS] onUpdate in test'); - }, - onConnect: function () { - console.info('[ANS] onConnect in test'); - }, - onDisconnect: function () { - console.info('[ANS] onDisConnect in test'); - }, - onDestroy: function () { - console.info('[ANS] onDestroy in test'); - }, + onConsume: function (data) { + let req = data.request; + console.info(`onConsume callback. req.id: ${req.id}`); + }, + onCancel: function (data) { + let req = data.request; + console.info(`onCancel callback. req.id: ${req.id}`); + }, + onUpdate: function (data) { + let req = data.request; + console.info(`onUpdate callback. req.id: ${req.id}`); + }, + onConnect: function () { + console.info(`onConnect callback.}`); + }, + onDisconnect: function () { + console.info(`onDisconnect callback.}`); + }, + onDestroy: function () { + console.info(`onDestroy callback.}`); + }, }; ``` - + 4. 发起通知订阅。 ```ts - NotificationSubscribe.subscribe(subscriber, (err, data) => { // callback形式调用异步接口 + notificationSubscribe.subscribe(subscriber, (err, data) => { // callback形式调用异步接口 if (err) { - console.error(`[ANS] failed to subscribe, error[${err}]`); + console.error(`Failed to subscribe notification. Code is ${err.code}, message is ${err.message}`); return; } - console.info(`[ANS] subscribeTest success : + ${data}`); + console.info(`Succeeded in subscribing to notification. Data: ${data}`); }); ``` diff --git a/zh-cn/application-dev/notification/notification-with-wantagent.md b/zh-cn/application-dev/notification/notification-with-wantagent.md index 737e7fd14460c004501ec23bd8f080be5e1b8a0f..4b3a00ff7ceefb580ba2b6e1aff051ea95f45c93 100644 --- a/zh-cn/application-dev/notification/notification-with-wantagent.md +++ b/zh-cn/application-dev/notification/notification-with-wantagent.md @@ -1,18 +1,16 @@ # 为通知添加行为意图 +[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)提供了封装行为意图的能力,该行为意图是指拉起指定的应用组件及发布公共事件等能力。OpenHarmony支持以通知的形式,将[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)从发布方传递至接收方,从而在接收方触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)中指定的意图。例如在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起目标应用组件。为了达成这一目标,开发者可以将[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)封装至通知消息中,当系统接收到[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)后,在用户点击通知栏时触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)的意图,从而拉起目标应用组件。 -WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。OpenHarmony支持以通知的形式,将WantAgent从发布方传递至接收方,从而在接收方触发WantAgent中指定的意图。例如,在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起目标应用组件。为了达成这一目标,开发者可以将WantAgent封装至通知消息中,当系统接收到WantAgent后,在用户点击通知栏时触发WantAgent的意图,从而拉起目标应用组件。 +为通知添加行为意图的实现方式如下图所示:发布通知的应用向应用组件管理服务AMS(Ability Manager Service)申请[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md),然后随其他通知信息一起发送给桌面,当用户在桌面通知栏上点击通知时,触发[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)动作。 - -为通知添加行为意图的实现方式如下图所示:发布通知的应用向应用组件管理服务AMS(Ability Manager Service)申请WantAgent,然后随其他通知信息一起发送给桌面,当用户在桌面通知栏上点击通知时,触发WantAgent动作。 - - **图1** 携带行为意图的通知运行机制 +**图1** 携带行为意图的通知运行机制 ![notification-with-wantagent](figures/notification-with-wantagent.png) ## 接口说明 -具体接口描述,详见[WantAgent接口文档](../reference/apis/js-apis-wantAgent.md)。 +具体接口描述,详见[WantAgent接口文档](../reference/apis/js-apis-app-ability-wantAgent.md)。 | **接口名** | **描述** | | -------- | -------- | @@ -25,111 +23,99 @@ WantAgent提供了封装行为意图的能力,这里所说的行为意图主 ## 开发步骤 -1. 导入模块。 - - ```ts - import NotificationManager from '@ohos.notificationManager'; +1. [使能通知开关](notification-enable.md),获得用户授权后,才能使用通知功能。 + +2. 导入模块。 + + ```typescript + import notificationManager from '@ohos.notificationManager'; import wantAgent from '@ohos.app.ability.wantAgent'; ``` -2. 创建WantAgentInfo信息。 - 场景一:创建拉起Ability的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 - - ```ts +3. 创建WantAgentInfo信息。 + + 场景一:创建拉起UIAbility的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 + + ```typescript let wantAgentObj = null; // 用于保存创建成功的wantAgent对象,后续使用其完成触发的动作。 - // 通过WantAgentInfo的operationType设置动作类型。 + // 通过WantAgentInfo的operationType设置动作类型 let wantAgentInfo = { - wants: [ - { - deviceId: '', - bundleName: 'com.example.test', - abilityName: 'com.example.test.MainAbility', - action: '', - entities: [], - uri: '', - parameters: {} - } - ], - operationType: wantAgent.OperationType.START_ABILITY, - requestCode: 0, - wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG] - } + wants: [ + { + deviceId: '', + bundleName: 'com.example.myapplication', + abilityName: 'EntryAbility', + action: '', + entities: [], + uri: '', + parameters: {} + } + ], + operationType: wantAgent.OperationType.START_ABILITY, + requestCode: 0, + wantAgentFlags:[wantAgent.WantAgentFlags.CONSTANT_FLAG] + }; ``` - 场景二:创建发布公共事件的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 - - ```ts + 场景二:创建发布[公共事件](../application-models/common-event-overview.md)的WantAgent的[WantAgentInfo](../reference/apis/js-apis-inner-wantAgent-wantAgentInfo.md)信息。 + + ```typescript let wantAgentObj = null; // 用于保存创建成功的WantAgent对象,后续使用其完成触发的动作。 - // wantAgentInfo + // 通过WantAgentInfo的operationType设置动作类型 let wantAgentInfo = { - wants: [ - { - action: 'event_name', // 设置事件名。 - parameters: {}, - } - ], - operationType: wantAgent.OperationType.SEND_COMMON_EVENT, - requestCode: 0, - wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG], - } + wants: [ + { + action: 'event_name', // 设置事件名 + parameters: {}, + } + ], + operationType: wantAgent.OperationType.SEND_COMMON_EVENT, + requestCode: 0, + wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG], + }; ``` -3. 创建WantAgent。 - - ```ts +4. 调用[getWantAgent()](../reference/apis/js-apis-app-ability-wantAgent.md#wantagentgetwantagent)方法进行创建WantAgent。 + + ```typescript // 创建WantAgent wantAgent.getWantAgent(wantAgentInfo, (err, data) => { - if (err) { - console.error('[WantAgent]getWantAgent err=' + JSON.stringify(err)); - } else { - console.info('[WantAgent]getWantAgent success'); - wantAgentObj = data; - } + if (err) { + console.error(`Failed to get want agent. Code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Succeeded in geting want agent.'); + wantAgentObj = data; }); ``` -4. 构造NotificationRequest对象。 - - ```ts +5. 构造NotificationRequest对象,并发布WantAgent通知。 + + ```typescript // 构造NotificationRequest对象 - let notificationRequest = { - content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, - normal: { - title: 'Test_Title', - text: 'Test_Text', - additionalText: 'Test_AdditionalText', - }, + let notificationRequest: notificationManager.NotificationRequest = { + content: { + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + normal: { + title: 'Test_Title', + text: 'Test_Text', + additionalText: 'Test_AdditionalText', }, - id: 1, - label: 'TEST', - wantAgent: wantAgentObj, + }, + id: 1, + label: 'TEST', + wantAgent: wantAgentObj, } - ``` - -5. 发布WantAgent通知。 - ```ts - // 通知发送 - NotificationManager.publish(notificationRequest, (err) => { - if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); - return; - } - console.info(`[ANS] publish success `); + notificationManager.publish(notificationRequest, (err) => { + if (err) { + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Succeeded in publishing notification.'); }); ``` -6. 用户通过点击通知栏上的通知,触发WantAgent的动作。 - - ```ts - // 触发WantAgent - let triggerInfo = { - code: 0 - } - wantAgent.trigger(wantAgentObj, triggerInfo, (completeData) => { - console.info('[WantAgent]getWantAgent success, completeData: ', + JSON.stringify(completeData)); - }); - ``` +6. 用户通过点击通知栏上的通知,系统会自动触发WantAgent的动作。 diff --git a/zh-cn/application-dev/notification/progress-bar-notification.md b/zh-cn/application-dev/notification/progress-bar-notification.md index 6c09173b2b7a434e64146c85c87ff3728ce0df88..d5720422d429fea4edf5f0da01309ac4127ecdf2 100644 --- a/zh-cn/application-dev/notification/progress-bar-notification.md +++ b/zh-cn/application-dev/notification/progress-bar-notification.md @@ -5,16 +5,16 @@ 目前系统模板仅支持进度条模板,通知模板[NotificationTemplate](../reference/apis/js-apis-inner-notification-notificationTemplate.md)中的data参数为用户自定义数据,用于显示与模块相关的数据,效果示意如下图所示。 +**图1** 进度条通知效果示意图 ![zh-cn_image_0000001416903138](figures/zh-cn_image_0000001416903138.png) ## 接口说明 -[isSupportTemplate()](../reference/apis/js-apis-notificationManager.md#notificationissupporttemplate)是查询模板是否支持接口,目前仅支持进度条模板。 +[`isSupportTemplate()`](../reference/apis/js-apis-notificationManager.md#notificationmanagerissupporttemplate)是查询模板是否支持接口,目前仅支持进度条模板。 -| | | -| -------- | -------- | | **接口名** | **描述** | +| -------- | -------- | | isSupportTemplate(templateName: string, callback: AsyncCallback<boolean>): void | 查询模板是否存在。 | @@ -25,31 +25,32 @@ 2. 导入模块。 ```ts - import NotificationManager from '@ohos.notificationManager'; + import notificationManager from '@ohos.notificationManager'; ``` 3. 查询系统是否支持进度条模板,查询结果为支持downloadTemplate模板类通知。 ```ts - NotificationManager.isSupportTemplate('downloadTemplate').then((data) => { + notificationManager.isSupportTemplate('downloadTemplate').then((data) => { console.info(`[ANS] isSupportTemplate success`); + console.info('Succeeded in supporting download template notification.'); let isSupportTpl: boolean = data; // isSupportTpl的值为true表示支持支持downloadTemplate模板类通知,false表示不支持 // ... }).catch((err) => { - console.error(`[ANS] isSupportTemplate failed, error[${err}]`); + console.error(`Failed to support download template notification. Code is ${err.code}, message is ${err.message}`); }); ``` - - > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** + + > **说明:** > 查询系统支持进度条模板后,再进行后续的步骤操作。 - + 4. 构造进度条模板对象,并发布通知。 ```ts - let notificationRequest = { + let notificationRequest: notificationManager.NotificationRequest = { id: 1, content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, normal: { title: 'test_title', text: 'test_text', @@ -64,11 +65,11 @@ } // 发布通知 - NotificationManager.publish(notificationRequest, (err) => { + notificationManager.publish(notificationRequest, (err) => { if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); return; } - console.info(`[ANS] publish success `); + console.info('Succeeded in publishing notification.'); }); ``` diff --git a/zh-cn/application-dev/notification/text-notification.md b/zh-cn/application-dev/notification/text-notification.md index 3d5ab8e27f3a61eb57a4aa1e9cf3c0f670cc9a37..7685eecf65bb5030d7c2615d57f8c91e0d9713b2 100644 --- a/zh-cn/application-dev/notification/text-notification.md +++ b/zh-cn/application-dev/notification/text-notification.md @@ -3,8 +3,7 @@ 基础类型通知主要应用于发送短信息、提示信息、广告推送等,支持普通文本类型、长文本类型、多行文本类型和图片类型。 - - **表1** 基础类型通知中的内容分类 +**表1** 基础类型通知中的内容分类 | 类型 | 描述 | | -------- | -------- | @@ -13,16 +12,15 @@ | NOTIFICATION_CONTENT_MULTILINE | 多行文本类型。 | | NOTIFICATION_CONTENT_PICTURE | 图片类型。 | +目前,系统仅支持通知栏订阅通知,将通知显示在通知栏中。基本类型通知的效果示意如下图所示。 -目前系统仅通知栏订阅了通知,将通知显示在通知栏里。基础类型通知呈现效果示意图如下所示。 - - - **图1** 基础类型通知呈现效果示意图  ![zh-cn_image_0000001466462305](figures/zh-cn_image_0000001466462305.png) +**图1** 基础类型通知呈现效果示意图 +![zh-cn_image_0000001466462305](figures/zh-cn_image_0000001466462305.png) ## 接口说明 -通知发布接口如下表所示,不同发布类型通知由[NotificationRequest](../reference/apis/js-apis-notification.md#notificationrequest)的字段携带不同的信息。 +通知发布接口如下表所示,不同发布类型通知由[NotificationRequest](../reference/apis/js-apis-inner-notification-notificationRequest.md#notificationrequest)的字段携带不同的信息。 | **接口名** | **描述** | | -------- | -------- | @@ -38,124 +36,123 @@ 2. 导入模块。 ```ts - import NotificationManager from '@ohos.notificationManager'; + import notificationManager from '@ohos.notificationManager'; ``` 3. 构造NotificationRequest对象,并发布通知。 - 普通文本类型通知由标题、文本内容和附加信息三个字段组成,其中标题和文本内容是必填字段,大小均需要小于200字节。 ```ts - let notificationRequest = { + let notificationRequest: notificationManager.NotificationRequest = { id: 1, content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知 - normal: { - title: 'test_title', - text: 'test_text', - additionalText: 'test_additionalText', - } + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知 + normal: { + title: 'test_title', + text: 'test_text', + additionalText: 'test_additionalText', + } } - } + }; - NotificationManager.publish(notificationRequest, (err) => { - if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); - return; - } - console.info(`[ANS] publish success`); + notificationManager.publish(notificationRequest, (err) => { + if (err) { + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Succeeded in publishing notification.'); }); ``` - 运行效果如下图所示。 - + 运行效果如下图所示。 ![zh-cn_image_0000001466782033](figures/zh-cn_image_0000001466782033.png) - 长文本类型通知继承了普通文本类型的字段,同时新增了长文本内容、内容概要和通知展开时的标题,其中长文本内容不超过1024字节,其他字段小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,内容为长文本内容。 ```ts - let notificationRequest = { + let notificationRequest: notificationManager.NotificationRequest = { id: 1, content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知 - longText: { - title: 'test_title', - text: 'test_text', - additionalText: 'test_additionalText', - longText: 'test_longText', - briefText: 'test_briefText', - expandedTitle: 'test_expandedTitle', - } + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT, // 长文本类型通知 + longText: { + title: 'test_title', + text: 'test_text', + additionalText: 'test_additionalText', + longText: 'test_longText', + briefText: 'test_briefText', + expandedTitle: 'test_expandedTitle', + } } - } + }; // 发布通知 - NotificationManager.publish(notificationRequest, (err) => { - if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); - return; - } - console.info(`[ANS] publish success`); + notificationManager.publish(notificationRequest, (err) => { + if (err) { + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Succeeded in publishing notification.'); }); ``` - 运行效果如下图所示。 + 运行效果如下图所示。 ![zh-cn_image_0000001416745530](figures/zh-cn_image_0000001416745530.png) - 多行文本类型通知继承了普通文本类型的字段,同时新增了多行文本内容、内容概要和通知展开时的标题,其字段均小于200字节。通知默认显示与普通文本相同,展开后,标题显示为展开后标题内容,多行文本内容多行显示。 ```ts - let notificationRequest = { + let notificationRequest: notificationManager.NotificationRequest = { id: 1, content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知 - multiLine: { - title: 'test_title', - text: 'test_text', - briefText: 'test_briefText', - longTitle: 'test_longTitle', - lines: ['line_01', 'line_02', 'line_03', 'line_04'], - } + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE, // 多行文本类型通知 + multiLine: { + title: 'test_title', + text: 'test_text', + briefText: 'test_briefText', + longTitle: 'test_longTitle', + lines: ['line_01', 'line_02', 'line_03', 'line_04'], + } } - } + }; // 发布通知 - NotificationManager.publish(notificationRequest, (err) => { + notificationManager.publish(notificationRequest, (err) => { if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); - return; + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); + return; } - console.info(`[ANS] publish success`); + console.info('Succeeded in publishing notification.'); }); ``` - 运行效果如下图所示。 + 运行效果如下图所示。 ![zh-cn_image_0000001417062446](figures/zh-cn_image_0000001417062446.png) - - 图片类型通知继承了普通文本类型的字段,同时新增了图片内容、内容概要和通知展开时的标题,图片内容为PixelMap型对象,其大小不能超过2M。 + - 图片类型通知继承了普通文本类型的字段,同时新增了图片内容、内容概要和通知展开时的标题,图片内容为[PixelMap](../reference/apis/js-apis-image.md#pixelmap7)类型对象,其大小不能超过2M。 ```ts - let notificationPicture: PixelMap = undefined; // 需要获取图片PixelMap信息 - let notificationRequest = { - id: 1, - content: { - contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE, - picture: { - title: 'test_title', - text: 'test_text', - additionalText: 'test_additionalText', - briefText: 'test_briefText', - expandedTitle: 'test_expandedTitle', - picture: notificationPicture - } + let imagePixelMap: PixelMap = undefined; // 需要获取图片PixelMap信息 + let notificationRequest: notificationManager.NotificationRequest = { + id: 1, + content: { + contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE, + picture: { + title: 'test_title', + text: 'test_text', + additionalText: 'test_additionalText', + briefText: 'test_briefText', + expandedTitle: 'test_expandedTitle', + picture: imagePixelMap } - } + } + }; // 发布通知 - NotificationManager.publish(notificationRequest, (err) => { - if (err) { - console.error(`[ANS] failed to publish, error[${err}]`); - return; - } - console.info(`[ANS] publish success `); + notificationManager.publish(notificationRequest, (err) => { + if (err) { + console.error(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Succeeded in publishing notification.'); }); ``` - 运行效果如下图所示。 + 运行效果如下图所示。 ![zh-cn_image_0000001466582045](figures/zh-cn_image_0000001466582045.png)