From f305a2339bb14f0c762655855bf91a0ad74d740f Mon Sep 17 00:00:00 2001 From: RayShih Date: Thu, 14 Apr 2022 10:16:55 +0800 Subject: [PATCH] update En docs of ability and notification Signed-off-by: RayShih --- en/application-dev/ability/Readme-EN.md | 3 + .../ability/ability-assistant-guidelines.md | 21 +- .../ability/ability-delegator.md | 139 ++++ en/application-dev/ability/fa-brief.md | 17 +- en/application-dev/ability/fa-dataability.md | 374 +++++----- en/application-dev/ability/fa-formability.md | 70 +- en/application-dev/ability/fa-pageability.md | 203 +++-- .../ability/fa-serviceability.md | 290 ++++++-- .../AbilityComponentInstanceMission.png | Bin 0 -> 56322 bytes .../ability/figures/aa-dump-a.PNG | Bin 0 -> 41040 bytes .../ability/figures/aa-dump-i.PNG | Bin 0 -> 6730 bytes .../ability/figures/aa-dump-l.PNG | Bin 0 -> 5357 bytes .../ability/figures/fa-package-info.png | Bin 35186 -> 34692 bytes .../figures/fa-pageAbility-lifecycle.png | Bin 17904 -> 17770 bytes en/application-dev/ability/wantagent.md | 72 ++ .../background-task-dev-guide.md | 67 +- .../background-task-overview.md | 6 +- en/application-dev/notification/Readme-EN.md | 17 + .../notification/assistant-guidelines.md | 134 ++++ .../notification/common-event.md | 179 +++++ .../notification/figures/anm-dump-A.png | Bin 0 -> 528 bytes .../notification/figures/anm-help.png | Bin 0 -> 2272 bytes .../notification/figures/ans.png | Bin 0 -> 16690 bytes .../notification/figures/cem-dump-e.png | Bin 0 -> 7086 bytes .../notification/figures/cem-help.png | Bin 0 -> 2915 bytes .../notification/figures/cem-publish-all.png | Bin 0 -> 1450 bytes .../figures/cem-publish-event.png | Bin 0 -> 1319 bytes .../notification/figures/ces.png | Bin 0 -> 29367 bytes .../notification/figures/notification.png | Bin 0 -> 74828 bytes .../notification/notification-brief.md | 23 + .../notification/notification.md | 248 ++++++ .../public_sys-resources/icon-caution.gif | Bin 0 -> 580 bytes .../public_sys-resources/icon-danger.gif | Bin 0 -> 580 bytes .../public_sys-resources/icon-note.gif | Bin 0 -> 394 bytes .../public_sys-resources/icon-notice.gif | Bin 0 -> 406 bytes .../public_sys-resources/icon-tip.gif | Bin 0 -> 253 bytes .../public_sys-resources/icon-warning.gif | Bin 0 -> 580 bytes .../quick-start/package-structure.md | 703 +++++++++++++++++- .../background-task-dev-guide.md | 2 +- .../background-task-overview.md | 8 +- 40 files changed, 2160 insertions(+), 416 deletions(-) create mode 100644 en/application-dev/ability/ability-delegator.md create mode 100644 en/application-dev/ability/figures/AbilityComponentInstanceMission.png create mode 100644 en/application-dev/ability/figures/aa-dump-a.PNG create mode 100644 en/application-dev/ability/figures/aa-dump-i.PNG create mode 100644 en/application-dev/ability/figures/aa-dump-l.PNG create mode 100644 en/application-dev/ability/wantagent.md create mode 100644 en/application-dev/notification/Readme-EN.md create mode 100644 en/application-dev/notification/assistant-guidelines.md create mode 100644 en/application-dev/notification/common-event.md create mode 100644 en/application-dev/notification/figures/anm-dump-A.png create mode 100644 en/application-dev/notification/figures/anm-help.png create mode 100644 en/application-dev/notification/figures/ans.png create mode 100644 en/application-dev/notification/figures/cem-dump-e.png create mode 100644 en/application-dev/notification/figures/cem-help.png create mode 100644 en/application-dev/notification/figures/cem-publish-all.png create mode 100644 en/application-dev/notification/figures/cem-publish-event.png create mode 100644 en/application-dev/notification/figures/ces.png create mode 100644 en/application-dev/notification/figures/notification.png create mode 100644 en/application-dev/notification/notification-brief.md create mode 100644 en/application-dev/notification/notification.md create mode 100644 en/application-dev/notification/public_sys-resources/icon-caution.gif create mode 100644 en/application-dev/notification/public_sys-resources/icon-danger.gif create mode 100644 en/application-dev/notification/public_sys-resources/icon-note.gif create mode 100644 en/application-dev/notification/public_sys-resources/icon-notice.gif create mode 100644 en/application-dev/notification/public_sys-resources/icon-tip.gif create mode 100644 en/application-dev/notification/public_sys-resources/icon-warning.gif diff --git a/en/application-dev/ability/Readme-EN.md b/en/application-dev/ability/Readme-EN.md index 8be4858131..f32b4f7c02 100644 --- a/en/application-dev/ability/Readme-EN.md +++ b/en/application-dev/ability/Readme-EN.md @@ -6,4 +6,7 @@ - [FA Widget Development](fa-formability.md) - Other + - [WantAgent Development](wantagent.md) - [Ability Assistant Usage](ability-assistant-guidelines.md) + - [Test Framework Usage](ability-delegator.md) + diff --git a/en/application-dev/ability/ability-assistant-guidelines.md b/en/application-dev/ability/ability-assistant-guidelines.md index de9f35adbc..09feb5e590 100644 --- a/en/application-dev/ability/ability-assistant-guidelines.md +++ b/en/application-dev/ability/ability-assistant-guidelines.md @@ -28,13 +28,13 @@ The ability assistant is pre-installed in the device environment. You can direct Starts an ability. - | Name | Description | - | --------- | ---------------------- | - | -h/--help | Help information. | + | Name | Description | + | --------- | -------------------------- | + | -h/--help | Help information. | | -d | Device ID. This parameter is optional. | | -a | Ability name. This parameter is mandatory.| | -b | Bundle name. This parameter is mandatory. | - | -D | Debugging mode. This parameter is optional. | + | -D | Debugging mode. This parameter is optional. | **Return value** @@ -82,13 +82,20 @@ The ability assistant is pre-installed in the device environment. You can direct | -i/--ability | AbilityRecord ID | Prints detailed information about a specified ability. | | -c/--client | | Prints detailed ability information. This parameter must be used together with other parameters. Example commands: **aa dump -a -c** and **aa dump -i 21 -c**.| - **Method** - + ``` aa dump -a ``` - + ![aa-dump-a](figures/aa-dump-a.PNG) + ``` + aa dump -l + ``` + ![aa-dump-l](figures/aa-dump-l.PNG) + ``` + aa dump -i 12 + ``` + ![aa-dump-i](figures/aa-dump-i.PNG) - **force-stop** Forcibly stops a process based on the bundle name. diff --git a/en/application-dev/ability/ability-delegator.md b/en/application-dev/ability/ability-delegator.md new file mode 100644 index 0000000000..cbf823baca --- /dev/null +++ b/en/application-dev/ability/ability-delegator.md @@ -0,0 +1,139 @@ +# Test Framework Usage + +## Overview +The delegator test framework provides a self-test framework (environment) for OpenHarmony applications. Using this framework, you can start an ability, schedule its lifecycle, listen for its state changes, run a shell command, and print the test result. + +## Constraints + +The APIs provided by the test framework can be used only in the test HAP. They take effect only after the test framework is started by running the **aa test** command or using the Integrated Development Environment (IDE). + + +## Starting the Test Framework + +The test framework can be started using either of the following methods: + +- Method 1: Run the **aa test** command. +- Method 2: Use the IDE. + +### Running aa test + +You can run the **aa test** command to start the test framework. You can specify the **TestRunner** to be used and the package name or module name of the HAP where the **TestRunner** is located. + +An example command in the FA model is as follows: + +```javascript +aa test -p com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20 +``` + +An example command in the stage model is as follows: +```javascript +aa test -m com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20 +``` +| Parameter | Mandatory| Description | +| --------------- | -------- | ------------------------------------------------------------ | +| -p | Yes | Package name of the HAP where the **TestRunner** is located. This parameter is used by the FA model. | +| -m | Yes | Module name of the HAP where the **TestRunner** is located. This parameter is used by the stage model. | +| -s unittest | Yes | Name of the **TestRunner** to be used. The TestRunner name must be the same as the file name. | +| -w | No | Timeout interval of a test case, in seconds. If this parameter is not specified, the test framework exits only after **finishTest** is invoked.| +| -s | No | It can be any parameter in the key-value format. The entered parameters can be obtained in key-value mode through **AbilityDelegatorArgs.parameters**. For example, in **-s classname myTest**, **classname** is the key and **myTest** is the value.| + +### Using the IDE + +For details about how to start the IDE, see [IDE Guide](https://developer.harmonyos.com/en/docs/documentation/doc-guides/ohos-openharmony-test-framework-0000001263160453#section1034420367508). + +## Introduction to TestRunner + +**TestRunner** is the entry class of the test framework test process. When the test process is started, the system calls related APIs in **TestRunner**. You need to inherit this class and override the **onPrepare** and **onRun** APIs. When creating an application template, the IDE initializes the default **TestRunner** and starts the default **TestAbility** in the **onRun** API. You can modify the test code of **TestAbility** or override **onPrepare** and **onRun** in **TestRunner** to implement your own test code. For details, see [TestRunner](../reference/apis/js-apis-testRunner.md). + +## Introduction to AbilityMonitor + +**AbilityMonitor** is provided by the test framework for binding to and listening for abilities. You can use **AbilityMonitor** to bind to an **Ability** instance and add **AbilityMonitor** to the listening list. After an ability is bound, the creation and lifecycle changes of the ability will trigger the related callback in **AbilityMonitor**. You can test and verify the ability in these callbacks. For details, see [AbilityMonitor](../reference/apis/js-apis-application-abilityMonitor.md). + +**Example** + +```javascript +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + +function onAbilityCreateCallback() { + console.info("onAbilityCreateCallback"); +} + +var monitor = { + abilityName: "abilityname", + onAbilityCreate: onAbilityCreateCallback +} + +var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); +abilityDelegator.addAbilityMonitor(monitor).then((void) => { + console.info("addAbilityMonitor promise"); +}); +``` + +## Introduction to AbilityDelegator + +**AbilityDelegator** is a main function class of the test framework. It provides the functions of starting an ability, obtaining an **Ability** instance, scheduling the ability lifecycle, listening for the ability state, and printing test results. + +**Modules to Import** + +```javascript +import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' +``` + +```javascript +var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() +``` + +### Starting an Ability and Listening for the Ability State + +Use **AbilityDelegator** and **AbilityMonitor** to start an ability, obtain an **Ability** instance, and listen for the ability state. + +**Example** + +```javascript +var abilityDelegator; +var ability; +var timeout = 100; + +function onAbilityCreateCallback() { + console.info("onAbilityCreateCallback"); +} + +var monitor = { + abilityName: "abilityname", + onAbilityCreate: onAbilityCreateCallback +} + +abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); +abilityDelegator.waitAbilityMonitor(monitor, timeout, (err, data) => { + ability = data; + console.info("waitAbilityMonitor callback"); +}); + +var want = { + bundleName: "bundleName", + abilityName: "abilityName" +}; + +abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); +abilityDelegator.startAbility(want, (err, data) => { + console.info("startAbility callback"); +}); +``` + +### Scheduling the Ability Lifecycle + +**AbilityDelegator** provides APIs to display and schedule the ability lifecycle and supports the foreground and background. It works with **AbilityMonitor** to listen for the ability lifecycle. For details, see [AbilityDelegator](../reference/apis/js-apis-application-abilityDelegator.md). + +### Running a Shell Command + +**AbilityDelegator** provides APIs to run shell commands. You can run a shell command in the test code. This feature takes effect only in the test environment. +**Example** + +```javascript + var abilityDelegator; + var cmd = "cmd"; + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); + abilityDelegator.executeShellCommand(cmd, (err,data) => { + console.info("executeShellCommand callback"); + }); +``` diff --git a/en/application-dev/ability/fa-brief.md b/en/application-dev/ability/fa-brief.md index baf58d1441..db7346a6f4 100644 --- a/en/application-dev/ability/fa-brief.md +++ b/en/application-dev/ability/fa-brief.md @@ -1,19 +1,32 @@ # FA Model Overview ## Overall Architecture -The development of an OpenHarmony application is essentially the development of one or more abilities. By scheduling abilities and managing their lifecycle, OpenHarmony implements application scheduling. In the FA model, three types of abilities are provided: Page, Service, and Data. The Page ability has the ArkUI and therefore provides the capability of interacting with users. The Service ability does not have a UI. It runs in the background and provides custom services for other abilities to invoke. The Data ability does not have a UI. It also runs in the background and enables other abilities to insert, delete, and query data. +The development of an OpenHarmony application is essentially the development of one or more abilities. By scheduling abilities and managing their lifecycle, OpenHarmony implements application scheduling. + +The Feature Ability (FA) model applies to application development using API 8 and earlier versions. In this model, there are Page, Service, Data, and Form abilities. +- The Page ability implements the ArkUI and provides the capability of interacting with users. +- The Service ability does not have a UI. It runs in the background and provides custom services for other abilities to invoke. +- The Data ability does not have a UI. It also runs in the background and enables other abilities to insert, delete, and query data. +- The Form ability provides a widget, which is a UI display mode. ## Application Package Structure **The following figure shows the application package structure.** + ![fa-package-info](figures/fa-package-info.png) +For details about the application package structure, see [Description of the Application Package Structure Configuration File](../quick-start/package-structure.md). + ## Lifecycle +Among all abilities, the Page ability has the most complex lifecycle, because it has a UI and is the interaction entry of applications. **The following figure shows the lifecycle of the Page ability.** ![fa-pageAbility-lifecycle](figures/fa-pageAbility-lifecycle.png) -You can override lifecycle functions in **app.js/app.ets** to process application logic. +The other abilities do not involve the foreground/background switchover and the **onShow** callback. +You can override the lifecycle callbacks in **app.js/app.ets** to process application logic. + +Currently, the **app.js** file provides only the **onCreate** and **onDestroy** callbacks, and the **app.ets** file provides the full lifecycle callbacks. ## Process and Thread Model diff --git a/en/application-dev/ability/fa-dataability.md b/en/application-dev/ability/fa-dataability.md index fc8cc8da08..4b098d095d 100644 --- a/en/application-dev/ability/fa-dataability.md +++ b/en/application-dev/ability/fa-dataability.md @@ -1,138 +1,94 @@ # Data Ability Development - -## Basic Concepts +## When to Use A Data ability helps applications manage access to data stored by themselves and other applications. It also provides APIs for sharing data with other applications either on the same device or across devices. Data ability providers can customize data access-related APIs such as data inserting, deleting, updating, and querying, as well as file opening, and share data with other applications through these open APIs. -## Creating a Data Ability -### 1. Implementation of the Data Subsystem -1. To meet the basic requirements of the database storage service, implement the **Insert**, **Query**, **Update**, and **Delete** APIs in the **Data** class to provide batch data processing. The traversal logic has been implemented by the **BatchInsert** and **ExecuteBatch** APIs. -2. The APIs used in the lifecycle of the Data ability are as follows: - - - onInitialized - - Called during ability initialization to initialize the relational database (RDB). - - - update - - Updates data in the database. - - - query - - Queries data in the database. - - - delete - - Deletes one or multiple data records from the database. - - - normalizeUri - - Normalizes the URI. A normalized URI applies to cross-device use, persistence, backup, and restore. When the context changes, it ensures that the same data item can be referenced. - - - batchInsert - - Inserts multiple data records into the database. - - - denormalizeUri +## Available APIs + +**Table 1** Data ability lifecycle callbacks +|API|Description| +|:------|:------| +|onInitialized|Called during ability initialization to initialize the relational database (RDB).| +|update|Updates data in the database.| +|query|Queries data in the database.| +|delete|Deletes one or multiple data records from the database.| +|normalizeUri|Normalizes the URI. A normalized URI applies to cross-device use, persistence, backup, and restore. When the context changes, it ensures that the same data item can be referenced.| +|batchInsert|Inserts multiple data records into the database.| +|denormalizeUri|Converts a normalized URI generated by **normalizeUri** into a denormalized URI.| +|insert|Inserts a data record into the database.| +|openFile|Opens a file.| +|getFileTypes|Obtains the MIME type of a file.| +|getType|Obtains the MIME type matching the data specified by the URI.| +|executeBatch|Operates data in the database in batches.| +|call|A customized API.| + + +## How to Develop +### Creating a Data Ability - Converts a normalized URI generated by **normalizeUri** into a denormalized URI. - - - insert - - Inserts a data record into the database. - - - openFile - - Opens a file. - - - getFileTypes - - Obtains the MIME type of a file. - - - getType - - Obtains the MIME type matching the data specified by the URI. - - - executeBatch - - Operates data in the database in batches. - - - call - - A customized API. - +1. To meet the basic requirements of the database storage service, implement the **Insert**, **Query**, **Update**, and **Delete** APIs in the **Data** class to provide batch data processing. The traversal logic has been implemented by the **BatchInsert** and **ExecuteBatch** APIs. - The following code snippet shows how to create a Data ability: + The following code snippet shows how to create a Data ability: ```javascript - import dataAbility from '@ohos.data.dataability' - import dataRdb from '@ohos.data.rdb' - - const TABLE_NAME = 'book' - const STORE_CONFIG = { name: 'book.db', encryptKey: new Uint8Array([]) } - const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS book(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, introduction TEXT NOT NULL)' - let rdbStore = undefined - export default { - onInitialized(abilityInfo) { - console.info('DataAbility onInitialized, abilityInfo:' + abilityInfo.bundleName) - dataRdb.getRdbStore(STORE_CONFIG, 1, (err, store) => { - console.info('DataAbility getRdbStore callback') - store.executeSql(SQL_CREATE_TABLE, []) - rdbStore = store - }); - }, - insert(uri, valueBucket, callback) { - console.info('DataAbility insert start') - rdbStore.insert(TABLE_NAME, valueBucket, callback) - }, - batchInsert(uri, valueBuckets, callback) { - console.info('DataAbility batch insert start') - for (let i = 0;i < valueBuckets.length; i++) { - console.info('DataAbility batch insert i=' + i) - if (i < valueBuckets.length - 1) { - rdbStore.insert(TABLE_NAME, valueBuckets[i], (num: number) => { - console.info('DataAbility batch insert ret=' + num) - }) - } else { - rdbStore.insert(TABLE_NAME, valueBuckets[i], callback) - } + onInitialized(abilityInfo) { + console.info('DataAbility onInitialized, abilityInfo:' + abilityInfo.bundleName) + dataRdb.getRdbStore(STORE_CONFIG, 1, (err, store) => { + console.info('DataAbility getRdbStore callback') + store.executeSql(SQL_CREATE_TABLE, []) + rdbStore = store + }); + }, + insert(uri, valueBucket, callback) { + console.info('DataAbility insert start') + rdbStore.insert(TABLE_NAME, valueBucket, callback) + }, + batchInsert(uri, valueBuckets, callback) { + console.info('DataAbility batch insert start') + for (let i = 0;i < valueBuckets.length; i++) { + console.info('DataAbility batch insert i=' + i) + if (i < valueBuckets.length - 1) { + rdbStore.insert(TABLE_NAME, valueBuckets[i], (num: number) => { + console.info('DataAbility batch insert ret=' + num) + }) + } else { + rdbStore.insert(TABLE_NAME, valueBuckets[i], callback) } - }, - query(uri, columns, predicates, callback) { - console.info('DataAbility query start') - let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) - rdbStore.query(rdbPredicates, columns, callback) - }, - update(uri, valueBucket, predicates, callback) { - console.info('DataAbilityupdate start') - let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) - rdbStore.update(valueBucket, rdbPredicates, callback) - }, - delete(uri, predicates, callback) { - console.info('DataAbilitydelete start') - let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) - rdbStore.delete(rdbPredicates, callback) } + }, + query(uri, columns, predicates, callback) { + console.info('DataAbility query start') + let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) + rdbStore.query(rdbPredicates, columns, callback) + }, + update(uri, valueBucket, predicates, callback) { + console.info('DataAbilityupdate start') + let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) + rdbStore.update(valueBucket, rdbPredicates, callback) + }, + delete(uri, predicates, callback) { + console.info('DataAbilitydelete start') + let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) + rdbStore.delete(rdbPredicates, callback) + } }; - ``` +2. Submodule Configuration -### 2. Subsystem Configuration - -| JSON Field | Description | -| ------------- | ------------------------------------------------------------ | -| "name" | Ability name, corresponding to the **Data** class name derived from **Ability**. | -| "type" | Ability type, which is **Data** for a Data ability. | -| "uri" | URI used for communication. | -| "visible" | Whether the Data ability is visible to other applications. When this parameter is set to **true**, the Data ability can communicate with other applications.| + | JSON Field| Description | + | ------------ | ------------------------------------------------------------ | + | "name" | Ability name, corresponding to the **Data** class name derived from **Ability**. | + | "type" | Ability type, which is **Data** for a Data ability. | + | "uri" | URI used for communication. | + | "visible" | Whether the Data ability is visible to other applications. When this parameter is set to **true**, the Data ability can communicate with other applications.| -**config.json configuration example** + **config.json configuration example** -```json -"abilities":[{ + ```json + "abilities":[{ "srcPath": "DataAbility", "name": ".DataAbility", "icon": "$media:icon", @@ -141,121 +97,142 @@ Data ability providers can customize data access-related APIs such as data inser "type": "data", "visible": true, "uri": "dataability://ohos.samples.etsdataability.DataAbility" -}] -``` + }] + ``` + +### Accessing a Data ability +#### Development Preparations + +Import the basic dependency packages and obtain the URI string for communicating with the Data submodule. + +The basic dependency packages include: +- @ohos.ability.featureAbility +- @ohos.data.dataability +- @ohos.data.rdb + +#### Data Ability API Development -## Accessing a Data ability -### 1. Preparing for JS Application Development -Basic dependency packages: - 1. @ohos.ability.featureAbility - 2. @ohos.data.dataability - 3. @ohos.data.rdb -URI string used for communication with the Data ability. -### 2. JS Application Development APIs -Create a utility API object. -```js -// Different from the URI defined in the config.json file, the URI passed in the parameter has an extra slash (/), because there is a DeviceID parameter between the second and the third slash (/). -var urivar = "dataability:///com.ix.DataAbility" -var DAHelper = featureAbility.acquireDataAbilityHelper( +1. Create a Data ability helper. + + For details about the APIs provided by **DataAbilityHelper**, see [DataAbilityHelper Module](../reference/apis/js-apis-dataAbilityHelper.md). + ```js + // Different from the URI defined in the config.json file, the URI passed in the parameter has an extra slash (/), because there is a DeviceID parameter between the second and the third slash (/). + var urivar = "dataability:///com.ix.DataAbility" + var DAHelper = featureAbility.acquireDataAbilityHelper( urivar -); -``` -Construct RDB data. -```js -var valuesBucket = {"name": "gaolu"} -var da = new ohos_data_ability.DataAbilityPredicates() -var valArray =new Array("value1"); -var cars = new Array({"batchInsert1" : "value1",}); -``` -Use **insert** to insert data to the Data subsystem. -```js -// Callback mode: -DAHelper.insert( + ); + ``` +2. Construct RDB data. + ```js + var valuesBucket = {"name": "gaolu"} + var da = new ohos_data_ability.DataAbilityPredicates() + var valArray =new Array("value1"); + var cars = new Array({"batchInsert1" : "value1",}); + ``` +3. Use **insert** to insert data to the Data submodule. + ```js + // Callback mode: + DAHelper.insert( urivar, valuesBucket, (error, data) => { expect(typeof(data)).assertEqual("number") } -); -// Promise mode: -var datainsert = await DAHelper.insert( + ); + ``` + + ```js + // Promise mode: + var datainsert = await DAHelper.insert( urivar, valuesBucket -); -``` -Use **delete** to delete data from the Data subsystem. -```js -// Callback mode: -DAHelper.delete( + ); + ``` +4. Use **delete** to delete data from the Data submodule. + ```js + // Callback mode: + DAHelper.delete( urivar, da, (error, data) => { expect(typeof(data)).assertEqual("number") } -); -// Promise mode: -var datadelete = await DAHelper.delete( + ); + ``` + + ```js + // Promise mode: + var datadelete = await DAHelper.delete( urivar, da, -); -``` -Use **update** to update data in the Data subsystem. -```js -// Callback mode: -DAHelper.update( + ); + ``` +5. Use **update** to update data in the Data submodule. + ```js + // Callback mode: + DAHelper.update( urivar valuesBucket, da, (error, data) => { expect(typeof(data)).assertEqual("number") } -); -// Promise mode: -var dataupdate = await DAHelper.update( + ); + ``` + + ```js + // Promise mode: + var dataupdate = await DAHelper.update( urivar, valuesBucket, da, -); -``` -Use **query** to query data in the Data subsystem. -```js -// Callback mode: -DAHelper.query( + ); + ``` +6. Use **query** to query data in the Data submodule. + ```js + // Callback mode: + DAHelper.query( urivar, valArray, da, (error, data) => { expect(typeof(data)).assertEqual("object") } -); -// Promise mode: -var dataquery = await DAHelper.query( + ); + ``` + + ```js + // Promise mode: + var dataquery = await DAHelper.query( urivar, valArray, da -); -``` -Use **batchInsert** to insert data in batches to the Data subsystem. -```js -// Callback mode: -DAHelper.batchInsert( + ); + ``` +7. Use **batchInsert** to insert data in batches to the Data submodule. + ```js + // Callback mode: + DAHelper.batchInsert( urivar, cars, (error, data) => { expect(typeof(data)).assertEqual("number") } -); -// Promise mode: -var databatchInsert = await DAHelper.batchInsert( + ); + ``` + + ```js + // Promise mode: + var databatchInsert = await DAHelper.batchInsert( urivar, cars -); -``` -Use **executeBatch** to process data in batches in the Data subsystem. -```js -// Callback mode: -DAHelper.executeBatch( + ); + ``` +8. Use **executeBatch** to process data in batches in the Data submodule. + ```js + // Callback mode: + DAHelper.executeBatch( urivar, [ { @@ -271,9 +248,12 @@ DAHelper.executeBatch( (error, data) => { expect(typeof(data)).assertEqual("object") } -); -// Promise mode: -var dataexecuteBatch = await DAHelper.executeBatch( + ); + ``` + + ```js + // Promise mode: + var dataexecuteBatch = await DAHelper.executeBatch( urivar, [ { @@ -289,16 +269,16 @@ var dataexecuteBatch = await DAHelper.executeBatch( interrupted:true, } ] -); -``` + ); + ``` ## Development Example The following sample is provided to help you better understand how to develop a Data ability: -- [eTSDataAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/eTSDataAbility) +- [DataAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/DataAbility) -This **eTSDataAbility** sample shows how to: +This sample shows how to: Create a Data ability in the **data.ts** file in the **DataAbility** directory. diff --git a/en/application-dev/ability/fa-formability.md b/en/application-dev/ability/fa-formability.md index 89a110ed2f..49f2cf96d7 100644 --- a/en/application-dev/ability/fa-formability.md +++ b/en/application-dev/ability/fa-formability.md @@ -1,39 +1,39 @@ # FA Widget Development ## Widget Overview -A Form ability presents a widget, which is a set of UI components used to display important information or operations for an application. It provides users with direct access to a desired application service, without requiring them to open the application. +A widget is a set of UI components used to display important information or operations for an application. It provides users with direct access to a desired application service, without requiring them to open the application. -A widget displays brief information about an application on the UI of another application (host application, currently system applications only) and provides basic interactive features such as opening a UI page or sending a message. The widget client is responsible for displaying the service widget. +A widget displays brief information about an application on the UI of another application (host application, currently system applications only) and provides basic interactive features such as opening a UI page or sending a message. The widget host is responsible for displaying the widget. Basic concepts: - Widget provider The widget provider is an atomic service that provides the content to be displayed. It controls the display content, component layout, and component click events of a widget. -- Widget client - The widget client is an application that displays the widget content and controls the position where the widget is displayed in the host application. +- Widget host + The widget host is an application that displays the widget content and controls the position where the widget is displayed in the host application. - Widget Manager The Widget Manager is a resident agent that manages widgets added to the system and provides functions such as periodic widget update. > ![icon-note.gif](public_sys-resources/icon-note.gif) **NOTE** -> The widget client and provider do not keep running all the time. The Widget Manager starts the widget provider to obtain widget information when a widget is added, deleted, or updated. +> The widget host and provider do not keep running all the time. The Widget Manager starts the widget provider to obtain widget information when a widget is added, deleted, or updated. -You only need to develop widget content as the widget provider. The system automatically handles the work done by the widget client and Widget Manager. +You only need to develop widget content as the widget provider. The system automatically handles the work done by the widget host and Widget Manager. The widget provider controls the widget content to display, component layout, and click events bound to components. ## Scenario -Form ability development refers to the development conducted by the widget provider based on the Feature Ability (FA) model(fa-brief.md). As a widget provider, you need to carry out the following operations: +Form ability development refers to the development conducted by the widget provider based on the [Feature Ability (FA) model](fa-brief.md). As a widget provider, you need to carry out the following operations: -- Develop the lifecycle callback functions in **FormAbility**. +- Develop the lifecycle callbacks in **LifecycleForm**. - Create a **FormBindingData** object. - Update a widget through **FormProvider**. - Develop the widget UI page. ## Available APIs -The table below describes the lifecycle callback functions provided **FormAbility**. +The table below describes the lifecycle callbacks provided **LifecycleForm**. -**Table 1** FormAbility APIs +**Table 1** LifecycleForm APIs | API | Description | | :----------------------------------------------------------- | :------------------------------------------- | @@ -43,7 +43,7 @@ The table below describes the lifecycle callback functions provided **FormAbilit | onVisibilityChange(newStatus: { [key: string]: number }): void | Called to notify the widget provider of the change of widget visibility. | | onEvent(formId: string, message: string): void | Called to instruct the widget provider to receive and process the widget event. | | onDestroy(formId: string): void | Called to notify the widget provider that a **Form** instance (widget) has been destroyed. | -| onConfigurationUpdated(config: Configuration): void; | Called when the configuration of the environment where the ability is running is updated. | +| onAcquireFormState?(want: Want): formInfo.FormState | Called when the widget provider receives the status query result of a specified widget. | For details about the **FormProvider** APIs, see [FormProvider](../reference/apis/js-apis-formprovider.md). @@ -58,9 +58,9 @@ For details about the **FormProvider** APIs, see [FormProvider](../reference/api ## How to Develop -### Creating a Form Ability +### Creating LifecycleForm -To create a widget in the FA model, you need to implement the lifecycle callback functions of **FormAbility**. The sample code is as follows: +To create a widget in the FA model, you need to implement the lifecycles of **LifecycleForm**. The sample code is as follows: 1. Import the required modules. @@ -70,7 +70,7 @@ To create a widget in the FA model, you need to implement the lifecycle callback import formProvider from '@ohos.application.formProvider' ``` -2. Implement the lifecycle callback functions of **FormAbility**. +2. Implement the lifecycle callbacks of **LifecycleForm**. ```javascript export default { @@ -85,11 +85,11 @@ To create a widget in the FA model, you need to implement the lifecycle callback return formData; }, onCastToNormal(formId) { - // Called when the widget client converts the temporary widget into a normal one. The widget provider should do something to respond to the conversion. + // Called when the widget host converts the temporary widget into a normal one. The widget provider should do something to respond to the conversion. console.log('FormAbility onCastToNormal'); }, onUpdate(formId) { - // To support scheduled update, periodic update, or update requested by the widget client for a widget, override this method for data update. + // To support scheduled update, periodic update, or update requested by the widget host for a widget, override this method for data update. console.log('FormAbility onUpdate'); let obj = { "title": "titleOnUpdate", @@ -101,7 +101,7 @@ To create a widget in the FA model, you need to implement the lifecycle callback }); }, onVisibilityChange(newStatus) { - // Called when the widget client initiates an event about visibility changes. The widget provider should do something to respond to the notification. + // Called when the widget host initiates an event about visibility changes. The widget provider should do something to respond to the notification. console.log('FormAbility onVisibilityChange'); }, onEvent(formId, message) { @@ -129,7 +129,7 @@ Configure the **config.json** file for the **Form** ability. | -------- | ------------------------------------------------------------ | -------- | ------------------------ | | name | Name of a JavaScript component. The default value is **default**. | String | No | | pages | Route information about all pages in the JavaScript component, including the page path and page name. The value is an array, in which each element represents a page. The first element in the array represents the home page of the JavaScript FA.| Array | No | - | window | Window-related configurations. This field applies only to phones, tablets, smart TVs, head units, and wearable devices.| Object | Yes | + | window | Window-related configurations. | Object | Yes | | type | Type of the JavaScript component. Available values are as follows:
**normal**: indicates that the JavaScript component is an application instance.
**form**: indicates that the JavaScript component is a widget instance.| String | Yes (initial value: **normal**)| | mode | Development mode of the JavaScript component. | Object | Yes (initial value: left empty) | @@ -147,28 +147,26 @@ Configure the **config.json** file for the **Form** ability. }] ``` -- The **abilities** module in the **config.json** file corresponds to the **Form** ability. The internal field structure is described as follows: +- The **abilities** module in the **config.json** file corresponds to the **LifecycleForm** of the widget. The internal field structure is described as follows: | Field | Description | Data Type | Default | | ------------------- | ------------------------------------------------------------ | ---------- | ------------------------ | | name | Class name of the widget. The value is a string with a maximum of 127 bytes. | String | No | | description | Description of the widget. The value can be a string or a resource index to descriptions in multiple languages. The value is a string with a maximum of 255 bytes.| String | Yes (initial value: left empty) | | isDefault | Whether the widget is a default one. Each ability has only one default widget.
**true**: The widget is the default one.
**false**: The widget is not the default one.| Boolean | No | - | type | Type of the widget. Available values are as follows:
**Java**: indicates a Java-programmed widget.
**JS**: indicates a JavaScript-programmed widget.| String | No | + | type | Type of the widget. Available values are as follows:
**JS**: indicates a JavaScript-programmed widget. | String | No | | colorMode | Color mode of the widget. Available values are as follows:
**auto**: The widget adopts the auto-adaptive color mode.
**dark**: The widget adopts the dark color mode.
**light**: The widget adopts the light color mode.| String | Yes (initial value: **auto**)| | supportDimensions | Grid styles supported by the widget. Available values are as follows:
1 * 2: indicates a grid with one row and two columns.
2 * 2: indicates a grid with two rows and two columns.
2 * 4: indicates a grid with two rows and four columns.
4 * 4: indicates a grid with four rows and four columns.| String array| No | | defaultDimension | Default grid style of the widget. The value must be available in the **supportDimensions** array of the widget.| String | No | - | landscapeLayouts | Landscape layouts for the grid styles. Values in this array must correspond to the values in the **supportDimensions** array. This field is required only by Java-programmed widgets.| String array| No | - | portraitLayouts | Portrait layouts for the grid styles. Values in this array must correspond to the values in the **supportDimensions** array. This field is required only by Java-programmed widgets.| String array| No | | updateEnabled | Whether the widget can be updated periodically. Available values are as follows:
**true**: The widget can be updated periodically, depending on the update way you select, either at a specified interval (**updateDuration**) or at the scheduled time (**scheduledUpdateTime**). **updateDuration** is preferentially recommended.
**false**: The widget cannot be updated periodically.| Boolean | No | | scheduledUpdateTime | Scheduled time to update the widget. The value is in 24-hour format and accurate to minute. | String | Yes (initial value: **0:0**) | | updateDuration | Interval to update the widget. The value is a natural number, in the unit of 30 minutes.
If the value is **0**, this field does not take effect.
If the value is a positive integer ***N***, the interval is calculated by multiplying ***N*** and 30 minutes.| Number | Yes (initial value: **0**) | - | formConfigAbility | Name of the facility or activity used to adjust a widget. | String | Yes (initial value: left empty) | - | formVisibleNotify | Whether the widget is allowed to use the widget visibility notification. | String | Yes (initial value: left empty) | - | jsComponentName | Component name of the widget. The value is a string with a maximum of 127 bytes. This field is required only by JavaScript-programmed widgets.| String | No | + | formConfigAbility | Indicates the link to a specific page of the application. The value is a URI. | String | Yes (initial value: left empty) | + | formVisibleNotify | Whether the widget is allowed to use the widget visibility notification. | String | Yes (initial value: left empty) | + | jsComponentName | Component name of the widget. The value is a string with a maximum of 127 bytes. | String | No | | metaData | Metadata of the widget. This field contains the array of the **customizeData** field. | Object | Yes (initial value: left empty) | | customizeData | Custom information about the widget. | Object array | Yes (initial value: left empty) | - + A configuration example is as follows: ```json @@ -180,10 +178,12 @@ Configure the **config.json** file for the **Form** ability. "label": "$string:form_FormAbility_label", "srcPath": "FormAbility", "type": "service", + "srcLanguage": "ets", + "formsEnabled": true, "forms": [{ "colorMode": "auto", "defaultDimension": "2*2", - "description": "This is a service widget.", + "description": "This is a widget.", "formVisibleNotify": true, "isDefault": true, "jsComponentName": "widget", @@ -233,13 +233,13 @@ You should override **onDestroy** to delete widget data. For details about the persistence method, see [Lightweight Data Store Development](../database/database-preference-guidelines.md). -Note that the **Want** passed by the widget client to the widget provider contains a temporary flag, indicating whether the requested widget is a temporary one. +Note that the **Want** passed by the widget host to the widget provider contains a temporary flag, indicating whether the requested widget is a temporary one. -Normal widget: a widget that will be persistently used by the widget client +Normal widget: a widget that will be persistently used by the widget host -Temporary widget: a widget that is temporarily used by the widget client +Temporary widget: a widget that is temporarily used by the widget host -Data of a temporary widget is not persistently stored. If the widget framework is killed and restarted, data of a temporary widget will be deleted. However, the widget provider is not notified of which widget is deleted, and still keeps the data. Therefore, the widget provider should implement data clearing. In addition, the widget client may convert a temporary widget into a normal one. If the conversion is successful, the widget provider should process the widget ID and store the data persistently. This prevents the widget provider from deleting persistent data when clearing temporary widgets. +Data of a temporary widget is not persistently stored. If the widget framework is killed and restarted, data of a temporary widget will be deleted. However, the widget provider is not notified of which widget is deleted, and still keeps the data. Therefore, the widget provider should implement data clearing. In addition, the widget host may convert a temporary widget into a normal one. If the conversion is successful, the widget provider should process the widget ID and store the data persistently. This prevents the widget provider from deleting persistent data when clearing temporary widgets. ### Developing the Widget UI Page You can use HML, CSS, and JSON to develop the UI page for a JavaScript-programmed widget. @@ -325,3 +325,11 @@ You can use HML, CSS, and JSON to develop the UI page for a JavaScript-programme Now you've got a widget shown below. ![fa-form-example](figures/fa-form-example.png) + +## Development Example + +The following sample is provided to help you better understand how to develop a widget on the FA model: + +[FormAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/FormAbility) + +This sample provides a widget. Users can create, update, and delete widgets on the home screen of their phones or by using their own widget host. This sample also implements widget information persistence by using lightweight data storage. diff --git a/en/application-dev/ability/fa-pageability.md b/en/application-dev/ability/fa-pageability.md index 1fe3433523..9d26c220e5 100644 --- a/en/application-dev/ability/fa-pageability.md +++ b/en/application-dev/ability/fa-pageability.md @@ -2,11 +2,13 @@ ## Overview ### Concepts -The Page ability has the ArkUI and therefore provides the capability of interacting with users. When you create an ability in the integrated development environment (IDE), the IDE automatically creates template code. The capabilities related to the Page ability are exposed through the singleton **featureAbility**, and the lifecycle callbacks are exposed through the callback functions in **app.js/app.ets**. +The Page ability implements the ArkUI and provides the capability of interacting with developers. When you create an ability in the integrated development environment (IDE), the IDE automatically creates template code. The capabilities related to the Page ability are implemented through the **featureAbility**, and the lifecycle callbacks are implemented through the callbacks in **app.js/app.ets**. ### Page Ability Lifecycle -The ability lifecycle is a general term for all states of an ability (either a Page or a Service ability), such as **INACTIVE**, **ACTIVE**, and **BACKGROUND**. +**Ability lifecycle** + +The Page ability lifecycle is a general term for all states of a Page ability, such as **INACTIVE**, **ACTIVE**, and **BACKGROUND**. The following figure shows the lifecycle state transition of the Page ability. @@ -15,21 +17,34 @@ The following figure shows the lifecycle state transition of the Page ability. Description of ability lifecycle states: - - **UNINITIALIZED**: The ability is not initialized. This is a temporary state. An ability changes directly to the **INITIAL** state upon its creation. + - **UNINITIALIZED**: The Page ability is not initialized. This is a temporary state. A Page ability changes directly to the **INITIAL** state upon its creation. - - **INITIAL**: This state refers to the initial or stopped state. The ability in this state is not running. The ability enters the **INACTIVE** state after it is started. + - **INITIAL**: This state refers to the initial or stopped state. The Page ability in this state is not running. The Page ability enters the **INACTIVE** state after it is started. - **INACTIVE**: The ability is visible but does not gain focus. - **ACTIVE**: The ability runs in the foreground and gains focus. - - **BACKGROUND**: The ability returns to the background. After being re-activated, the ability enters the **ACTIVE** state. After being destroyed, the ability enters the **INITIAL** state. + - **BACKGROUND**: The Page ability returns to the background. After being re-activated, the Page ability enters the **ACTIVE** state. After being destroyed, the Page ability enters the **INITIAL** state. -**The following figure shows the lifecycle of the Page ability.** +**The following figure shows the relationship between lifecycle callbacks and lifecycle states of the Page ability.** ![fa-pageAbility-lifecycle](figures/fa-pageAbility-lifecycle.png) -You can override the lifecycle callback functions provided by the Page ability in **app.js/app.ets**. +You can override the lifecycle callbacks provided by the Page ability in the **app.js/app.ets** file. Currently, the **app.js** file provides only the **onCreate** and **onDestroy** callbacks, and the **app.ets** file provides the full lifecycle callbacks. + +### Launch Type +The ability supports three launch types: singleton, multi-instance, and instance-specific. +The **launchType** item in the **config.json** file is used to specify the launch type. + +| Launch Type | Description |Description | +| ----------- | ------- |---------------- | +| standard | Multi-instance | A new instance is started each time an ability starts.| +| singleton | Singleton | Only one instance exists in the system. If an instance already exists when an ability is started, that instance is reused.| +| specified | Instance-specific| The internal service of an ability determines whether to create multiple instances during running.| + +By default, **standard** is used. + ## Development Guidelines ### Available APIs @@ -46,48 +61,48 @@ You can override the lifecycle callback functions provided by the Page ability i ### Starting a Local Page Ability -* Modules to Import +**Modules to Import** +```js + import featureAbility from '@ohos.ability.featureAbility' ``` -import featureAbility from '@ohos.ability.featureAbility' -``` -* Example + +**Example** ```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.startAbility({ + import featureAbility from '@ohos.ability.featureAbility' + featureAbility.startAbility({ want: { action: "", entities: [""], type: "", options: { - // Grant the permission to read the URI. + // Grant the permission to perform read operations on the URI. authReadUriPermission: true, - // Grant the permission to write the URI. + // Grant the permission to perform write operations on the URI. authWriteUriPermission: true, - // Forward the intent result to the origin ability. + // Support forwarding the Want result to the ability. abilityForwardResult: true, - // Mark the ability start-up triggered by continuation. + // Enable abiligy continuation. abilityContinuation: true, // Specify that a component does not belong to ohos. notOhosComponent: true, - // Specify whether an ability is started. + // Specify that an ability is started. abilityFormEnabled: true, - // Grant the permission to persist the URI. + // Grant the permission for possible persisting on the URI. authPersistableUriPermission: true, - // Grant the permission to persist the URI. + // Grant the permission for possible persisting on the prefix URI. authPrefixUriPermission: true, - // Support distributed scheduling and start-up across multiple devices. + // Support distributed scheduling system startup on multiple devices. abilitySliceMultiDevice: true, - // An ability using the Service template is started regardless of whether the - // host application has been started. + // A service ability is started regardless of whether the host application has been started. startForegroundAbility: true, // Install the specified ability if it is not installed. installOnDemand: true, - // Return the result to the origin ability slice. + // Return the result to the ability slice. abilitySliceForwardResult: true, - // Install the specified ability with the background mode if it is not installed. + // Install the specified ability with background mode if it is not installed. installWithBackgroundMode: true }, deviceId: "", @@ -95,14 +110,17 @@ featureAbility.startAbility({ abilityName: "com.example.startability.MainAbility", uri: "" }, -}, -); + }, + ); ``` + You can also include **parameters** in the **want** parameter and set its value in the key-value format. -* Example + +**Example** + ```javascript -import featureAbility from '@ohos.ability.featureAbility' -featureAbility.startAbility({ + import featureAbility from '@ohos.ability.featureAbility' + featureAbility.startAbility({ want: { bundleName: "com.example.startability", @@ -111,44 +129,115 @@ featureAbility.startAbility({ abilityName: "com.example.startability.MainAbility" } }, -}, -); + }, + ); ``` -### Starting a Remote Page Ability +### Starting a Remote Page Ability (Applying only to System Applications) +>Note: The **getTrustedDeviceListSync** API of the **DeviceManager** class is open only to system applications. Therefore, remote Page ability startup applies only to system applications. -* Modules to Import +**Modules to Import** ``` -import featureAbility from '@ohos.ability.featureAbility' + import featureAbility from '@ohos.ability.featureAbility' + import deviceManager from '@ohos.distributedHardware.deviceManager'; ``` -* Example +**Example** +```ts + function onStartRemoteAbility() { + console.info('onStartRemoteAbility begin'); + let params; + let wantValue = { + bundleName: 'ohos.samples.etsDemo', + abilityName: 'ohos.samples.etsDemo.RemoteAbility', + deviceId: getRemoteDeviceId(), + parameters: params + }; + console.info('onStartRemoteAbility want=' + JSON.stringify(wantValue)); + featureAbility.startAbility({ + want: wantValue + }).then((data) => { + console.info('onStartRemoteAbility finished, ' + JSON.stringify(data)); + }); + console.info('onStartRemoteAbility end'); + } +``` -```javascript -var promise = await featureAbility.startAbility({ - want: - { - deviceId: this.deviceId, - bundleName: "com.example.test", - abilityName: "com.example.test.MainAbility", - }, -} -); +Obtain **deviceId** from **DeviceManager**. The sample code is as follows: + +```ts + import deviceManager from '@ohos.distributedHardware.deviceManager'; + let dmClass; + function getRemoteDeviceId() { + if (typeof dmClass === 'object' && dmClass != null) { + let list = dmClass.getTrustedDeviceListSync(); + if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') { + console.log("MainAbility onButtonClick getRemoteDeviceId err: list is null"); + return; + } + console.log("MainAbility onButtonClick getRemoteDeviceId success:" + list[0].deviceId); + return list[0].deviceId; + } else { + console.log("MainAbility onButtonClick getRemoteDeviceId err: dmClass is null"); + } + } +``` + +In the cross-device scenario, the application must also apply for the data synchronization permission from end users. The sample code is as follows: + +```ts + import abilityAccessCtrl from "@ohos.abilityAccessCtrl"; + import bundle from '@ohos.bundle'; + async function RequestPermission() { + console.info('RequestPermission begin'); + let array: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + let bundleFlag = 0; + let tokenID = undefined; + let userID = 100; + let appInfo = await bundle.getApplicationInfo('ohos.samples.etsDemo', bundleFlag, userID); + tokenID = appInfo.accessTokenId; + let atManager = abilityAccessCtrl.createAtManager(); + let requestPermissions: Array = []; + for (let i = 0;i < array.length; i++) { + let result = await atManager.verifyAccessToken(tokenID, array[i]); + console.info("verifyAccessToken result:" + JSON.stringify(result)); + if (result == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { + } else { + requestPermissions.push(array[i]); + } + } + console.info("requestPermissions:" + JSON.stringify(requestPermissions)); + if (requestPermissions.length == 0 || requestPermissions == []) { + return; + } + let context = featureAbility.getContext(); + context.requestPermissionsFromUser(requestPermissions, 1, (data)=>{ + console.info("data:" + JSON.stringify(data)); + console.info("data requestCode:" + data.requestCode); + console.info("data permissions:" + data.permissions); + console.info("data authResults:" + data.authResults); + }); + console.info('RequestPermission end'); + } ``` + ### Lifecycle APIs -**Table 2** Lifecycle callback functions + +**Table 2** Lifecycle callbacks | API | Description | | ------------ | ------------------------------------------------------------ | -| onShow() | Invoked when the ability is switched from the background to the foreground. In this case, the ability is visible to users.| -| onHide() | Invoked when the ability is switched from the foreground to the background. In this case, the ability is invisible.| -| onDestroy() | Invoked when the ability is destroyed. In this callback, you can make preparations for app exit, such as recycling resources and clearing the cache.| -| onCreate() | Invoked when the ability is created for the first time. You can initialize the application in this callback.| -| onInactive() | Invoked when the ability loses focus. An ability loses focus before entering the background state.| -| onActive() | Invoked when the ability is switched to the foreground and gains focus. | - -* Example -You need to override the lifecycle callback functions in **app.js/app.ets**. The IDE template generates **onCreate()** and **onDestroy()** by default. You need to override the other functions. +| onShow() | Called when the ability is switched from the background to the foreground. In this case, the ability is visible to users.| +| onHide() | Called when the ability is switched from the foreground to the background. In this case, the ability is invisible.| +| onDestroy() | Called when the ability is destroyed. In this callback, you can make preparations for app exit, such as recycling resources and clearing the cache.| +| onCreate() | Called when the ability is created for the first time. You can initialize the application in this callback.| +| onInactive() | Called when the ability loses focus. An ability loses focus before entering the background state.| +| onActive() | Called when the ability is switched to the foreground and gains focus. | + +**Example** + +You need to override the lifecycle callbacks in **app.js/app.ets**. The IDE template generates **onCreate()** and **onDestroy()** by default. You need to override the other callbacks. + ```javascript export default { onCreate() { @@ -174,6 +263,6 @@ export default { ### Development Example The following sample is provided to help you better understand how to develop a Page ability: -- [DMS](https://gitee.com/openharmony/app_samples/tree/master/ability/DMS) +[DMS](https://gitee.com/openharmony/app_samples/tree/master/ability/DMS) This sample describes how to start a local ability and remote ability. diff --git a/en/application-dev/ability/fa-serviceability.md b/en/application-dev/ability/fa-serviceability.md index 41811571cc..1d3ffc44f8 100644 --- a/en/application-dev/ability/fa-serviceability.md +++ b/en/application-dev/ability/fa-serviceability.md @@ -1,34 +1,27 @@ # Service Ability Development -## Basic Concepts +## When to Use A Service ability is used to run tasks in the background, such as playing music or downloading files. It does not provide a UI for user interaction. Service abilities can be started by other applications or abilities and can remain running in the background even after the user switches to another application. -## Creating a Service Ability +## Available APIs -1. Create a child class of the **Ability** class and override the following Service ability-related lifecycle callbacks to implement your own logic for processing requests to interact with your Service ability: - - - onStart() - - This callback is invoked for initializing a Service ability when the Service ability is being created. This callback is invoked only once in the entire lifecycle of a Service ability. The **Want** object passed to this callback must be null. - - - onCommand() - - This callback is invoked every time a Service ability is created on a client. You can calculate calling statistics and perform initialization operations in this callback. - - - onConnect() - - This callback is invoked when another ability is connected to the Service ability. It returns an **IRemoteObject**. You can use this callback to generate a channel for the other ability to interact with the Service ability during inter-process communication (IPC). An ability can connect to the same Service ability for multiple times. When the first client is connected to a Service ability, the system calls **onConnect()** to generate an **IRemoteObject** for the Service ability, and the generated **IRemoteObject** will then be cached and used for all clients that are connected to this Service ability without having to call **onConnect()** again. - - - onDisconnect() - - This callback is invoked when another ability is disconnected from the Service ability. +**Table 1** Service ability lifecycle callbacks +|API|Description| +|:------|:------| +|onStart|Called to initialize a Service ability when the Service ability is being created. This callback is invoked only once in the entire lifecycle of a Service ability. The **Want** object passed to this callback must be null.| +|onCommand|Called every time a Service ability is created on a client. You can calculate calling statistics and perform initialization operations in this callback.| +|onConnect|Called when another ability is connected to the Service ability.| +|onDisconnect|Called when another ability is disconnected from the Service ability.| +|onStop|Called when the Service ability is being destroyed. You should override this callback for your Service ability to clear its resources, such as threads and registered listeners.| - - onStop() +## How to Develop - This callback is invoked when a Service ability is being destroyed. You should override this callback for your Service ability to clear its resources, such as threads and registered listeners. +### Creating a Service Ability +1. Create a child class of the **Ability** class and override the following Service ability-related lifecycle callbacks to implement your own logic for processing requests to interact with your Service ability: + The following code snippet shows how to create a Service ability: - + ```javascript export default { onStart(want) { @@ -49,11 +42,11 @@ A Service ability is used to run tasks in the background, such as playing music } ``` -2. Register a Service ability. - - You must declare your Service ability in the **config.json** file by setting its **type** attribute to **service**. +2. Register a Service ability. - ```javascript + You must declare your Service ability in the **config.json** file by setting its **type** attribute to **service**. + + ```javascript { "module": { "abilities": [ @@ -68,14 +61,13 @@ A Service ability is used to run tasks in the background, such as playing music } ... } - ``` + ``` - -## Starting the Service Ability +### Starting a Service ability -The **Ability** class provides the **startAbility()** method for you to start another Service ability by passing a **Want** object. +The **Ability** class provides the **startAbility()** API for you to start another Service ability by passing a **Want** object. To set information about the target Service ability, you can first construct a **Want** object with the **bundleName** and **abilityName** parameters specified. The meanings of the parameters are as follows: @@ -86,7 +78,7 @@ The following code snippet shows how to start a Service ability running on the l ```javascript import featureAbility from '@ohos.ability.featureability'; -var promise = await featureAbility.startAbility( +let promise = await featureAbility.startAbility( { want: { @@ -97,29 +89,49 @@ var promise = await featureAbility.startAbility( ); ``` -- After the preceding code is executed, the **startAbility()** method is called to start the Service ability. - - If the Service ability is not running, the system calls **onStart()** to initialize the Service ability, and then calls **onCommand()** on the Service ability. - - If the Service ability is running, the system directly calls **onCommand()** on the Service ability. +After the preceding code is executed, the **startAbility()** API is called to start the Service ability. +- If the Service ability is not running, the system calls **onStart()** to initialize the Service ability, and then calls **onCommand()** on the Service ability. +- If the Service ability is running, the system directly calls **onCommand()** on the Service ability. -- Stopping a Service ability - Once created, the Service ability keeps running in the background. The system does not stop or destroy it unless memory resources must be reclaimed. You can call **terminateAbility()** on a Service ability to stop it or call **stopAbility()** on another ability to stop the specified Service ability. + +### Stopping a Service ability + + Once created, the Service ability keeps running in the background. The system does not stop or destroy it unless memory resources must be reclaimed. You can call **terminateSelf()** on a Service ability to stop it or call **stopAbility()** on another ability to stop the specified Service ability. -## Connecting to a Local Service Ability +### Connecting to a Local Service Ability If you need to connect a Service ability to a Page ability or to a Service ability in another application, you must first implement the **IAbilityConnection** API for the connection. A Service ability allows other abilities to connect to it through **connectAbility()**. -When calling **connectAbility()**, you should pass a **Want** object containing information about the target Service ability and an **IAbilityConnection** object to the method. **IAbilityConnection** provides the following callbacks that you should implement: **onConnect()**, **onDisconnect()**, and **onFailed()**. The **onConnect()** callback is invoked when a Service ability is connected, **onDisconnect()** is invoked when a Service ability is unexpectedly disconnected, and **onFailed()** is invoked when a connection to a Service ability fails. +When calling **connectAbility()**, you should pass a **Want** object containing information about the target Service ability and an **IAbilityConnection** object to the API. **IAbilityConnection** provides the following callbacks that you should implement: **onConnect()**, **onDisconnect()**, and **onFailed()**. The **onConnect()** callback is invoked when a Service ability is connected, **onDisconnect()** is invoked when a Service ability is unexpectedly disconnected, and **onFailed()** is invoked when a connection to a Service ability fails. The following code snippet shows how to implement the callbacks: ```javascript -var mRemote; +let mRemote; function onConnectCallback(element, remote){ - console.log('ConnectAbility onConnect Callback') + console.log('onConnectLocalService onConnectDone element: ' + element); + console.log('onConnectLocalService onConnectDone remote: ' + remote); mRemote = remote; + if (mRemote == null) { + prompt.showToast({ + message: "onConnectLocalService not connected yet" + }); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInt(1); + data.writeInt(99); + await mRemote.sendRequest(1, data, reply, option); + let msg = reply.readInt(); + prompt.showToast({ + message: "onConnectLocalService connect result: " + msg, + duration: 3000 + }); } function onDisconnectCallback(element){ @@ -135,7 +147,7 @@ The following code snippet shows how to connect to a local Service ability: ```javascript import featureAbility from '@ohos.ability.featureability'; -var connId = featureAbility.connectAbility( +let connId = featureAbility.connectAbility( { bundleName: "com.jstest.serviceability", abilityName: "com.jstest.serviceability.MainAbility", @@ -155,7 +167,7 @@ The following code snippet shows how the Service ability instance returns itself ```javascript import rpc from "@ohos.rpc"; -var mMyStub; +let mMyStub; export default { onStart(want) { class MyStub extends rpc.RemoteObject{ @@ -166,6 +178,16 @@ export default { return null; } onRemoteRequest(code, message, reply, option) { + console.log("ServiceAbility onRemoteRequest called"); + if (code === 1) { + let op1 = data.readInt(); + let op2 = data.readInt(); + console.log("op1 = " + op1 + ", op2 = " + op2); + reply.writeInt(op1 + op2); + } else { + console.log("ServiceAbility unknown request code"); + } + return true; } } mMyStub = new MyStub("ServiceAbility-test"); @@ -186,19 +208,38 @@ export default { } ``` -## Connecting to a Remote Service Ability +### Connecting to a Remote Service Ability (Applying only to System Applications) +>Note: The **getTrustedDeviceListSync** API of the **DeviceManager** class is open only to system applications. Therefore, remote Service ability startup applies only to system applications. If you need to connect a Service ability to a Page ability on another device or to a Service ability in another application on another device, you must first implement the **IAbilityConnection** interface for the connection. A Service ability allows other abilities on another device to connect to it through **connectAbility()**. -When calling **connectAbility()**, you should pass a **Want** object containing information about the target Service ability and an **IAbilityConnection** object to the method. **IAbilityConnection** provides the following callbacks that you should implement: **onConnect()**, **onDisconnect()**, and **onFailed()**. The **onConnect()** callback is invoked when a Service ability is connected, **onDisconnect()** is invoked when a Service ability is unexpectedly disconnected, and **onFailed()** is invoked when a connection to a Service ability fails. +When calling **connectAbility()**, you should pass a **Want** object containing information about the target Service ability and an **IAbilityConnection** object to the API. **IAbilityConnection** provides the following callbacks that you should implement: **onConnect()**, **onDisconnect()**, and **onFailed()**. The **onConnect()** callback is invoked when a Service ability is connected, **onDisconnect()** is invoked when a Service ability is unexpectedly disconnected, and **onFailed()** is invoked when a connection to a Service ability fails. The following code snippet shows how to implement the callbacks: -```javascript -var mRemote; +```ts +let mRemote; function onConnectCallback(element, remote){ - console.log('ConnectRemoteAbility onConnect Callback') + console.log('onConnectLocalService onConnectDone element: ' + element); + console.log('onConnectLocalService onConnectDone remote: ' + remote); mRemote = remote; + if (mRemote == null) { + prompt.showToast({ + message: "onConnectLocalService not connected yet" + }); + return; + } + let option = new rpc.MessageOption(); + let data = new rpc.MessageParcel(); + let reply = new rpc.MessageParcel(); + data.writeInt(1); + data.writeInt(99); + await mRemote.sendRequest(1, data, reply, option); + let msg = reply.readInt(); + prompt.showToast({ + message: "onConnectLocalService connect result: " + msg, + duration: 3000 + }); } function onDisconnectCallback(element){ @@ -210,17 +251,35 @@ function onFailedCallback(code){ } ``` -The **Want** of the target Service ability must contain the remote **deviceId**, which can be obtained through **deviceManager**. +The **Want** of the target Service ability must contain the remote **deviceId**, which can be obtained from **DeviceManager**. The sample code is as follows: + +```ts +import deviceManager from '@ohos.distributedHardware.deviceManager'; +let dmClass; +function getRemoteDeviceId() { + if (typeof dmClass === 'object' && dmClass != null) { + let list = dmClass.getTrustedDeviceListSync(); + if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') { + console.log("MainAbility onButtonClick getRemoteDeviceId err: list is null"); + return; + } + console.log("MainAbility onButtonClick getRemoteDeviceId success:" + list[0].deviceId); + return list[0].deviceId; + } else { + console.log("MainAbility onButtonClick getRemoteDeviceId err: dmClass is null"); + } +} +``` The following code snippet shows how to connect to a remote Service ability: -```javascript +```ts import featureAbility from '@ohos.ability.featureability'; -var connId = featureAbility.connectAbility( +let connId = featureAbility.connectAbility( { - deviceId: deviceId, - bundleName: "com.jstest.serviceability", - abilityName: "com.jstest.serviceability.MainAbility", + deviceId: getRemoteDeviceId(), + bundleName: "ohos.samples.etsDemo", + abilityName: "ohos.samples.etsDemo.ServiceAbility", }, { onConnect: onConnectCallback, @@ -229,53 +288,124 @@ var connId = featureAbility.connectAbility( }, ); ``` +In the cross-device scenario, the application must also apply for the data synchronization permission from end users. The sample code is as follows: + +```ts +import abilityAccessCtrl from "@ohos.abilityAccessCtrl"; +import bundle from '@ohos.bundle'; +async function RequestPermission() { + console.info('RequestPermission begin'); + let array: Array = ["ohos.permission.DISTRIBUTED_DATASYNC"]; + let bundleFlag = 0; + let tokenID = undefined; + let userID = 100; + let appInfo = await bundle.getApplicationInfo('ohos.samples.etsDemo', bundleFlag, userID); + tokenID = appInfo.accessTokenId; + let atManager = abilityAccessCtrl.createAtManager(); + let requestPermissions: Array = []; + for (let i = 0;i < array.length; i++) { + let result = await atManager.verifyAccessToken(tokenID, array[i]); + console.info("verifyAccessToken result:" + JSON.stringify(result)); + if (result == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { + } else { + requestPermissions.push(array[i]); + } + } + console.info("requestPermissions:" + JSON.stringify(requestPermissions)); + if (requestPermissions.length == 0 || requestPermissions == []) { + return; + } + let context = featureAbility.getContext(); + context.requestPermissionsFromUser(requestPermissions, 1, (data)=>{ + console.info("data:" + JSON.stringify(data)); + console.info("data requestCode:" + data.requestCode); + console.info("data permissions:" + data.permissions); + console.info("data authResults:" + data.authResults); + }); + console.info('RequestPermission end'); +} +``` When a Service ability is connected, the **onConnect()** callback is invoked and returns an **IRemoteObject** defining the proxy used for communicating with the Service ability. OpenHarmony provides a default implementation of the **IRemoteObject** interface. You can inherit **rpc.RemoteObject** to implement your own class of **IRemoteObject**. The following code snippet shows how the Service ability instance returns itself to the calling ability: -```javascript +```ts import rpc from "@ohos.rpc"; -var mMyStub; -export default { - onStart(want) { - class MyStub extends rpc.RemoteObject{ - constructor(des) { - if (typeof des === 'string') { - super(des); - } - return null; - } - onRemoteRequest(code, message, reply, option) { - } +class FirstServiceAbilityStub extends rpc.RemoteObject{ + constructor(des) { + if (typeof des === 'string') { + super(des); + } else { + return null; } - mMyStub = new MyStub("ServiceAbility-test"); + } + onRemoteRequest(code, data, reply, option) { + console.log("ServiceAbility onRemoteRequest called"); + if (code === 1) { + let op1 = data.readInt(); + let op2 = data.readInt(); + console.log("op1 = " + op1 + ", op2 = " + op2); + reply.writeInt(op1 + op2); + } else { + console.log("ServiceAbility unknown request code"); + } + return true; + } +} + +export default { + onStart() { + console.info('ServiceAbility onStart'); }, - onCommand(want, restart, startId) { - console.log('ServiceAbility onCommand'); + onStop() { + console.info('ServiceAbility onStop'); }, onConnect(want) { - console.log('ServiceAbility OnConnect'); - return mMyStub; - }, - onDisconnect() { - console.log('ServiceAbility OnDisConnect'); + console.log("ServiceAbility onConnect"); + try { + let value = JSON.stringify(want); + console.log("ServiceAbility want:" + value); + } catch(error) { + console.log("ServiceAbility error:" + error); + } + return new FirstServiceAbilityStub("first ts service stub"); }, - onStop() { - console.log('ServiceAbility onStop'); + onDisconnect(want) { + console.log("ServiceAbility onDisconnect"); + let value = JSON.stringify(want); + console.log("ServiceAbility want:" + value); }, -} + onCommand(want, startId) { + console.info('ServiceAbility onCommand'); + let value = JSON.stringify(want); + console.log("ServiceAbility want:" + value); + console.log("ServiceAbility startId:" + startId); + } +}; ``` ## Development Example -The following sample is provided to help you better understand how to develop a Service ability: +### The following sample is provided to help you better understand how to develop a Service ability: + +- [ServiceAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/ServiceAbility) -- [eTSServiceAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/eTSServiceAbility) -This **eTSServiceAbility** sample shows how to: +This sample shows how to: Create a local Service ability in the **service.ts** file in the **ServiceAbility** directory. Encapsulate the process of starting and connecting to the local Service ability in the **MainAbility** directory. + + +### The following sample is provided to help you better understand how to develop a remote Service ability: + +- [DMS](https://gitee.com/openharmony/app_samples/tree/master/ability/DMS) + +This **DMS** sample shows how to: + +Create a remote Service ability in the **service.ts** file in the **ServiceAbility** directory. + +Encapsulate the process of connecting to the remote Service ability in the **RemoteAbility** directory. diff --git a/en/application-dev/ability/figures/AbilityComponentInstanceMission.png b/en/application-dev/ability/figures/AbilityComponentInstanceMission.png new file mode 100644 index 0000000000000000000000000000000000000000..ce349b7a3544739dd2d3314d35f5b8e3ee68357c GIT binary patch literal 56322 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ability/figures/aa-dump-a.PNG b/en/application-dev/ability/figures/aa-dump-a.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ae8d41f65f68d73895be5bbbb539c0d220b2a9a5 GIT binary patch literal 41040 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ability/figures/aa-dump-i.PNG b/en/application-dev/ability/figures/aa-dump-i.PNG new file mode 100644 index 0000000000000000000000000000000000000000..12998c5ba3e7d667d1147b6e825f8d110d5c5c5e GIT binary patch literal 6730 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/ability/figures/aa-dump-l.PNG b/en/application-dev/ability/figures/aa-dump-l.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a6797eef284990e3fa25e71562ac8afbddf0821d GIT binary patch literal 5357 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 CEot}w literal 35186 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 YJRkWfp-U%)5b#e`Nkg$%{`s5#1HC@SzyJUM diff --git a/en/application-dev/ability/wantagent.md b/en/application-dev/ability/wantagent.md new file mode 100644 index 0000000000..d092ea537e --- /dev/null +++ b/en/application-dev/ability/wantagent.md @@ -0,0 +1,72 @@ +# WantAgent Development +### Introduction +The **WantAgent** class encapsulates a **Want** object that specifies a particular action. To trigger a **WantAgent**, you can either call **wantAgent.trigger** to trigger it directly or add it to a notification so that it will be triggered when users tap the notification. + +You can use a **WantAgent** in a notification to start an ability or publish a common event. + +### When to Use +Start another ability through a **WantAgent**. + +### Available APIs +| API | Description| +| ---------------------------------------------------------------------------------------------- | ----------- | +| wantAgent.getWantAgentInfo(info: WantAgentInfo, callback: AsyncCallback\) | Creates a **WantAgent** object. This API uses an asynchronous callback to return the result.| +| wantAgent.getWantAgent(info: WantAgentInfo): Promise\; | Creates a **WantAgent** object. This API uses a promise to return the result.| +| commonEvent.trigger(agent: WantAgent, triggerInfo: TriggerInfo, callback?: Callback\) | Triggers a **WantAgent**.| + +### How to Develop +1. Import the **WantAgent** module. + +```javascript +import wantAgent from '@ohos.wantAgent'; +``` + +2. Create a **WantAgentInfo** object. For details about the data types and parameters of **WantAgentInfo**, see [WantAgent Module](../reference/apis/js-apis-wantAgent.md#wantagentinfo). + +```javascript +private wantAgentObj = null // Save the WantAgent object created. It will be used to complete the trigger operations. + +//wantAgentInfo +var wantAgentInfo = { + wants: [ + { + deviceId: "", + bundleName: "com.example.test", + abilityName: "com.example.test.MainAbility", + action: "", + entities: [], + uri: "", + parameters: {} + } + ], + operationType: OperationType.START_ABILITY, + requestCode: 0, + wantAgentFlags:[WantAgentFlags.CONSTANT_FLAG] +} +``` + +3. Create a **WantAgent** object and save the returned **wantAgentObj** for subsequent trigger operations. + +```javascript +// Create a WantAgent object. +wantAgent.getWantAgent(wantAgentInfo, (err, wantAgentObj) => { + if (err.code) { + console.error("[WantAgent]getWantAgent err=" + JSON.stringify(err)) + } else { + console.log("[WantAgent]getWantAgent success") + this.wantAgentObj = wantAgentObj + } +}) +``` + +4. Trigger the **WantAgent**. + +``` +// Trigger the WantAgent. +var triggerInfo = { + code:0 +} +wantAgent.trigger(wantAgentObj, triggerInfo, (completeData) => { + console.log("[WantAgent]getWantAgent success, completeData: ", + JSON.stringify(completeData)) +}) +``` diff --git a/en/application-dev/background-task-management/background-task-dev-guide.md b/en/application-dev/background-task-management/background-task-dev-guide.md index c504299cc8..c96dfca665 100644 --- a/en/application-dev/background-task-management/background-task-dev-guide.md +++ b/en/application-dev/background-task-management/background-task-dev-guide.md @@ -36,12 +36,12 @@ import backgroundTaskManager from '@ohos.backgroundTaskManager'; ```js import backgroundTaskManager from '@ohos.backgroundTaskManager'; - + let myReason = 'test requestSuspendDelay'; let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { console.info("Request suspension delay will time out."); }); - + var id = delayInfo.requestId;console.info("requestId is: " + id); ``` @@ -106,36 +106,53 @@ ohos.permission.KEEP_BACKGROUND_RUNNING | function stopBackgroundRunning(context: Context, callback: AsyncCallback<void>): void;
function stopBackgroundRunning(context: Context): Promise<void>; | Cancels the continuous task.| -For details about **WantAgent**, see [WantAgent](../reference/apis/js-apis-notification.md#WantAgent). - +For details about **wantAgent**, see [WantAgent](../reference/apis/js-apis-wantAgent.md). **Table 4** Background modes -| Name| ID Value| Description| -| -------- | -------- | -------- | -| DATA_TRANSFER | 1 | Data transfer.| -| AUDIO_PLAYBACK | 2 | Audio playback.| -| AUDIO_RECORDING | 3 | Audio recording.| -| LOCATION | 4 | Positioning and navigation.| -| BLUETOOTH_INTERACTION | 5 | Bluetooth-related task.| -| MULTI_DEVICE_CONNECTION | 6 | Multi-device connection.| -| WIFI_INTERACTION | 7 | WLAN-related task (reserved).| -| VOIP | 8 | Voice and video call (reserved).| -| TASK_KEEPING | 9 | Computing task (for PC only).| + +| Name| ID Value| Description| Item| +| -------- | -------- | -------- | -------- | +| DATA_TRANSFER | 1 | Data transfer.| dataTransfer | +| AUDIO_PLAYBACK | 2 | Audio playback.| audioPlayback | +| AUDIO_RECORDING | 3 | Audio recording.| audioRecording | +| LOCATION | 4 | Positioning and navigation.| location | +| BLUETOOTH_INTERACTION | 5 | Bluetooth-related task.| bluetoothInteraction | +| MULTI_DEVICE_CONNECTION | 6 | Multi-device connection.| multiDeviceConnection | +| WIFI_INTERACTION | 7 | WLAN-related task (reserved).| wifiInteraction | +| VOIP | 8 | Voice and video call (reserved).| voip | +| TASK_KEEPING | 9 | Computing task (for specific devices only).| taskKeeping | ## How to Develop -1. Declare the continuous task permission in the **config.json** file. +1. Configure the continuous task permission and background mode type in the **config.json** file, with the ability type set to **service**. ```json "module": { - "package": "com.example.myapplication", - ..., - "reqPermissions": [ - { - "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" - } - ] + "package": "com.example.myapplication", + + "abilities": [ + + { + "backgroundModes": [ + "dataTransfer", + "location", + + ], + + "type": "service" + } + ], + "defPermissions": [ + { + "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" + } + ], + "reqPermissions": [ + { + "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" + } + ] } ``` @@ -174,13 +191,13 @@ For details about **WantAgent**, see [WantAgent](../reference/apis/js-apis-notif ```js import backgroundTaskManager from '@ohos.backgroundTaskManager'; import featureAbility from '@ohos.ability.featureAbility'; - + backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext()).then(() => { console.info("Operation succeeded"); }).catch((err) => { console.error("Operation failed Cause: " + err); }); - + ``` ## Development Examples diff --git a/en/application-dev/background-task-management/background-task-overview.md b/en/application-dev/background-task-management/background-task-overview.md index 37db9e3dbb..5062447a9c 100644 --- a/en/application-dev/background-task-management/background-task-overview.md +++ b/en/application-dev/background-task-management/background-task-overview.md @@ -28,9 +28,9 @@ Adhere to the following constraints and rules when using transient tasks: - **When to request**: An application can request a transient task only when it is running in the foreground or before it is suspended in the background. Otherwise, the application may be suspended, resulting in request failure. By default, an application has 6–12 seconds of running time (subject to the application scenario) before it is suspended in the background. -- **Timeout**: The system notifies the application of the suspension delay timeout by using a callback. The application must then cancel the delayed suspension or apply for delayed suspension again. Otherwise, the application will be forcibly suspended. +- **Timeout**: If a suspension delay is about to time out, the system notifies the application of the timeout by using a callback. The application must then cancel the delayed suspension. Otherwise, the application will be forcibly terminated. -- **When to cancel**: The requesting application shall cancel the request when the transient task is complete. If the request is forcibly canceled by the system, the time frame allowed for the application to run in the background will be affected. +- **When to cancel**: The requesting application shall proactively cancel the request when the transient task is complete, rather than waiting for a system callback. Otherwise, the time frame allowed for the application to run in the background will be affected. - **Quota mechanism**: To prevent abuse of the keepalive, each application has a certain quota every day (dynamically adjusted based on user habits). After using up the quota, an application cannot request transient tasks. Therefore, applications should cancel their request immediately after the transient tasks are complete, to avoid quota consumption. (Note: The quota refers to the requested duration and does not include the time when the application runs in the background.) @@ -52,7 +52,7 @@ OpenHarmony provides 9 background modes for services that require continuous tas | multiDeviceConnection | Distributed interconnection| A distributed task is running.| | | wifiInteraction | WLAN transmission| A WLAN-related task is running.| System API, which is available only to system applications| | voip | Voice and video calls over VoIP| A call-related task is running.| System API, which is available only to system applications| -| taskKeeping | Computing task| A computing task is running| PC-specific, valid only on PCs| +| taskKeeping | Computing task| A computing task is running| Effective only for specific devices| ### Restrictions on Using Continuous Tasks - If a user triggers a perceivable task, such as broadcasting and navigation, the corresponding background mode is triggered. When the task is started, the system forcibly displays a notification to the user. diff --git a/en/application-dev/notification/Readme-EN.md b/en/application-dev/notification/Readme-EN.md new file mode 100644 index 0000000000..2a0df0e3a4 --- /dev/null +++ b/en/application-dev/notification/Readme-EN.md @@ -0,0 +1,17 @@ +# Common Event and Notification + +[Common Event and Notification Overview](notification-brief.md) + +### Common Event + +* [Common Event Development](common-event.md) + +### Notification + +* [Notification Development](notification.md) + + + +### Debugging Tools + +* [Debugging Assistant Usage](assistant-guidelines.md) diff --git a/en/application-dev/notification/assistant-guidelines.md b/en/application-dev/notification/assistant-guidelines.md new file mode 100644 index 0000000000..35d3eaeaad --- /dev/null +++ b/en/application-dev/notification/assistant-guidelines.md @@ -0,0 +1,134 @@ +# Debugging Assistant Usage + +The common event and notification module provides debugging tools to facilitate your application development. With these tools, you can view common event and notification information, publish common events, and more. These tools have been integrated with the system. You can run related commands directly in the shell. + +### cem Debugging Assistant + +##### publish + +* Functionality + + Publishes a common event. + +* Usage + + `cem publish []` + + The table below describes the available options. + + | Option | Description | + | ------------ | ------------------------------------------ | + | -e/--event | Indicates the name of the common event to publish. Mandatory. | + | -s/--sticky | Indicates that the common event to publish is sticky. Optional. By default, non-sticky events are published.| + | -o/--ordered | Indicates that the common event to publish is ordered. Optional. By default, non-ordered events are published. | + | -c/--code | Indicates the result code of the common event. Optional. | + | -d/--data | Indicates the data carried in the common event. Optional. | + | -h/--help | Indicates the help Information | + +* Example + + `cem publish --event "testevent"` + + Publish a common event named **testevent**. + + ![cem-publish-event](figures/cem-publish-event.png) + + + + `cem publish -e "testevent" -s -o -c 100 -d "this is data" ` + + Publish a sticky, ordered common event named **testevent**. The result code of the event is **100** and the data carried is **this is data**. + + ![cem-publish-all](figures/cem-publish-all.png) + +##### dump + +* Functionality + + Displays information about common events. + +* Usage + + `cem dump []` + + The table below describes the available options. + + | Option | Description | + | ---------- | -------------------------------------------- | + | -a/--all | Displays information about all common events that have been sent since system startup.| + | -e/--event | Displays information about a specific event. | + | -h/--help | Displays the help information. | + +* Example + +​ `cem dump -e "testevent"` + +​ Display information about the common event testevent. + +​ ![cem-dump-e](figures/cem-dump-e.png) + +##### help + +* Functionality + + Displays the help information. + +* Usage + + `cem help` + +* Example + + ![cem-help](figures/cem-help.png) + + + +### anm Debugging Assistant + +##### dump + +* Functionality + + Displays information about notifications. + +* Usage + + `anm dump []` + + The table below describes the available options. + + | Option | Description | + | ---------------- | ---------------------------------------- | + | -A/--active | Displays information about all active notifications. | + | -R/--recent | Displays information about the recent notifications. | + | -D/--distributed | Displays information about distributed notifications from other devices. | + | --setRecentCount | Indicates the number of the cached recent notifications to be displayed. Optional.| + | -h/--help | Displays the help information. | + +* Example + + `anm dump -A` + + Displays information about all active notifications. + + ![anm-dump-A](figures/anm-dump-A.png) + + + + `anm dump --setRecentCount 10` + + Set the number of the cached recent notifications to be displayed to 10. + +##### help + +* Functionality + + Displays the help information. + +* Usage + + `anm help` + +* Example + + ![anm-help](figures/anm-help.png) diff --git a/en/application-dev/notification/common-event.md b/en/application-dev/notification/common-event.md new file mode 100644 index 0000000000..cd139f0700 --- /dev/null +++ b/en/application-dev/notification/common-event.md @@ -0,0 +1,179 @@ +# Common Event Development +### Introduction +OpenHarmony provides a Common Event Service (CES) for applications to subscribe to, publish, and unsubscribe from common events. + +Common events are classified into system common events and custom common events. + ++ System common events: The system sends an event based on system policies to the apps that have subscribed to this event when it occurs. This type of event is typically system events published by key system services, such as HAP installation, update, and uninstallation. + ++ Custom common event: customized by applications to implement cross-application event communication. + +Each application can subscribe to common events as required. After your application subscribes to a common event, the system sends it to your application every time the event is published. Such an event may be published by the system, other applications, or your own application. + +## Common Event Subscription Development + +### When to Use +You can create a subscriber object to subscribe to a common event to obtain the parameters passed in the event. Certain system common events require specific permissions to subscribe to. For details, see [Required Permissions](../reference/apis/js-apis-commonEvent.md). + +### Available APIs +| API | Description| +| ---------------------------------------------------------------------------------------------- | ----------- | +| commonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo, callback: AsyncCallback) | Creates a subscriber. This API uses a callback to return the result.| +| commonEvent.createSubscriber(subscribeInfo: CommonEventSubscribeInfo) | Creates a subscriber. This API uses a promise to return the result. | +| commonEvent.subscribe(subscriber: CommonEventSubscriber, callback: AsyncCallback) | Subscribes to common events.| + +### How to Develop +1. Import the **commonEvent** module. + +```javascript +import commonEvent from '@ohos.commonEvent'; +``` + +2. Create a **subscribeInfo** object. For details about the data types and parameters of the object, see [CommonEventSubscribeInfo](../reference/apis/js-apis-commonEvent.md#commoneventsubscribeinfo). + +```javascript +private subscriber = null // Used to save the created subscriber object for subsequent subscription and unsubscription. + +// Subscriber information +var subscribeInfo = { + events: ["event"], +} +``` + +3. Create a subscriber object and save the returned object for subsequent operations such as subscription and unsubscription. + +```javascript +// Callback for subscriber creation. +commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => { + if (err.code) { + console.error("[CommonEvent]CreateSubscriberCallBack err=" + JSON.stringify(err)) + } else { + console.log("[CommonEvent]CreateSubscriber") + this.subscriber = subscriber + this.result = "Create subscriber succeed" + } +}) +``` + +4. Create a subscription callback, which is triggered when an event is received. The data returned by the subscription callback contains information such as the common event name and data carried by the publisher. For details about the data types and parameters of the common event data, see [CommonEventData](../reference/apis/js-apis-commonEvent.md#commoneventdata). + +```javascript +// Callback for common event subscription. +if (this.subscriber != null) { + commonEvent.subscribe(this.subscriber, (err, data) => { + if (err.code) { + console.error("[CommonEvent]SubscribeCallBack err=" + JSON.stringify(err)) + } else { + console.log("[CommonEvent]SubscribeCallBack data=" + JSON.stringify(data)) + this.result = "receive, event = " + data.event + ", data = " + data.data + ", code = " + data.code + } + }) + this.result = "Subscribe succeed" +} else { + prompt.showToast({ message: "Need create subscriber" }) +} +``` + +## Public Event Publishing Development + +### When to Use +You can use the **publish** APIs to publish a custom common event, which can carry data for subscribers to parse and process. + +### Available APIs +| API | Description| +| ---------------------------------- | ------ | +| commonEvent.publish(event: string, callback: AsyncCallback) | Publishes a common event.| +| commonEvent.publish(event: string, options: CommonEventPublishData, callback: AsyncCallback) | Publishes a common event with given attributes.| + +### How to Develop +#### Development for Publishing a Common Event +1. Import the **commonEvent** module. + +```javascript +import commonEvent from '@ohos.commonEvent'; +``` + +2. Pass in the common event name and callback, and publish the event. + +```javascript +// Publish a common event. +commonEvent.publish("event", (err) => { + if (err.code) { + console.error("[CommonEvent]PublishCallBack err=" + JSON.stringify(err)) + } else { + console.info("[CommonEvent]Publish1") + } +}) +``` + +#### Development for Publishing a Common Event with Given Attributes +1. Import the **commonEvent** module. + +```javascript +import commonEvent from '@ohos.commonEvent' +``` + +2. Define attributes of the common event to publish. For details about the data types and parameters in the data to publish, see [CommonEventPublishData](../reference/apis/js-apis-commonEvent.md#commoneventpublishdata). + +```javascript +// Attributes of a common event. +var options = { + code: 1, // Result code of the common event + data: "initial data";// Result data of the common event +} +``` + +3. Pass in the common event name, attributes of the common event, and callback, and publish the event. + +```javascript +// Publish a common event. +commonEvent.publish("event", options, (err) => { + if (err.code) { + console.error("[CommonEvent]PublishCallBack err=" + JSON.stringify(err)) + } else { + console.info("[CommonEvent]Publish2") + } +}) +``` + +## Common Event Unsubscription Development + +### When to Use +You can use the **unsubscribe** API to unsubscribe from a common event. + +### Available APIs +| API | Description| +| ---------------------------------- | ------ | +| commonEvent.unsubscribe(subscriber: CommonEventSubscriber, callback?: AsyncCallback) | Unsubscribes from a common event.| + +### How to Develop +1. Import the **commonEvent** module. + +```javascript +import commonEvent from '@ohos.commonEvent'; +``` + +2. Subscribe to a common event by following instructions in [Common Event Subscription Development](#Common-Event-Subscription-Development). +3. Invoke the **unsubscribe** API in **CommonEvent** to unsubscribe from the common event. + +```javascript +if (this.subscriber != null) { + commonEvent.unsubscribe(this.subscriber, (err) => { + if (err.code) { + console.error("[CommonEvent]UnsubscribeCallBack err=" + JSON.stringify(err)) + } else { + console.log("[CommonEvent]Unsubscribe") + this.subscriber = null + this.result = "Unsubscribe succeed" + } + }) +} +``` + +## Development Example + +The following sample is provided to help you better understand how to use the common event functionality: + +- [CommonEvent](https://gitee.com/openharmony/app_samples/tree/master/ability/CommonEvent) + +This sample shows how to use **CommonEvent** APIs in Extended TypeScript (eTS) to create subscribers and subscribe to, publish, and unsubscribe from common events. diff --git a/en/application-dev/notification/figures/anm-dump-A.png b/en/application-dev/notification/figures/anm-dump-A.png new file mode 100644 index 0000000000000000000000000000000000000000..368e6f2d810976486e786a4c8f0603a87ad48540 GIT binary patch literal 528 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/figures/cem-help.png b/en/application-dev/notification/figures/cem-help.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca4bc0605f9c1f75a8cb45f8ab77c9c5d6f04e4 GIT binary patch literal 2915 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/figures/cem-publish-all.png b/en/application-dev/notification/figures/cem-publish-all.png new file mode 100644 index 0000000000000000000000000000000000000000..99526e1f7245d101914354e2a89d5e97d710c27f GIT binary patch literal 1450 zcmV;b1y%ZqP) zOLnU;3_!^{9kM8v&H}QhzClk?;@XyE`3KxPY5~hamcKI2V_nzpeczXD+ZF(TQP2(n z{P1`_pWm;4s1yLun|=n0001b@NcvNa2{SWoA7VYf&IV({xdf< z%ZH8`R2<`f!~*SLKk$J6%uVg``RJG#k>$zRWZ!pe1~3>;9ldiMZvF0ewrvStqZJs9 zX5&d~hn4al4Wo4**sncO9hJ(UXBk=Ryhpb)v@f;k{mw0X=k`n48Y6DoCO)TmrZoT2 z9CaKufaxLMOG-bj{h*v&{Riu)iSagtww7PZKV$OF6pL?NJ`x)L)B3L_ZSGk~zZUYP^pbB` z+m{}`S*2r+DcZYI#bQJyooi`&D>dzPmIlniZ0|HupOU;weZK{g{2AI04`S-&9Dd zS9&W|W6U}3-cYn$N-oL2H=2;d5zmT838U@fWwd|6wQ22NE#-SXXk%2l=cRmd>0^Z<#T~TwQ=6P(ay;}}>eSlM zVn46^<1>=nFuk>Wv_4xCi~VZl(R!0xjZlWQY+9CGuKj6|kHvqz?VDDoR`Np`G5c!! z6{&q`S$0P*@#|77+W`Q;RXF|0U$KpA0001I&+%slP1>UxE{GM@- z??GW4bP#!7pB-9{9hB;BY2606E5w)q;16`90OR0vqjMx2}$BF%hqr|;xW%!%nIVLkb+rheM;wdfz_X{jHn{5}3v>-4$YiAkwvJoGyG z4&Y2Y)^+`kRmQL)<_;N`(&yx8?pyQM2J&Zl>FTLTi;E3Kd=93 z(pa$SU-C}1%D+^<)U_JvYsm+=3-6`uVGGvH9a(fUiI;`IP`vS^xk507*qoM6N<$ Ef}@4z%>V!Z literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/figures/cem-publish-event.png b/en/application-dev/notification/figures/cem-publish-event.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ca7e73093f1be72c743bd7c08467f11e2a0e05 GIT binary patch literal 1319 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 TVgbu0Pif!OzwzPvgBSk`5|Axq literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/figures/notification.png b/en/application-dev/notification/figures/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..93029e29a91d6dd435a9a768cb79c5fc48184565 GIT binary patch literal 74828 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%0D%H3gI=0!$6tNV%RFYNu- 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 L5A>D)yyE`_jBB%F literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/notification-brief.md b/en/application-dev/notification/notification-brief.md new file mode 100644 index 0000000000..8be39b2cc8 --- /dev/null +++ b/en/application-dev/notification/notification-brief.md @@ -0,0 +1,23 @@ +# Common Event and Notification Overview + +The common event and notification module enables applications to publish messages to other applications, and receive messages from the system or other applications. These messages can be news push messages, advertisement notifications, or warning information. + +Common Event Service (CES) enables applications to publish, subscribe to, and unsubscribe from common events. Based on the sender type, common events are classified into system common events and custom common events. + +![ces](figures/ces.png) + +- System common event: sent by the system based on system policies to the applications that have subscribed to the event. This type of event includes the screen-on/off events that the users are aware of and the system events published by key system services, such as USB device attachment or detachment, network connection, and system update events. + +- Custom common event: customized by applications to be received by specific subscribers. This type of event is usually related to the service logic of the sender applications. + + The Advanced Notification Service (ANS) enables applications to publish notifications. Below are some typical use cases for publishing notifications: + + - Display received SMS messages and instant messages. + + - Display push messages of applications, such as advertisements, version updates, and news notifications. + + - Display ongoing events, such as music playback, navigation information, and download progress. + +Notifications are displayed in the notification panel. Uses can delete a notification or click the notification to trigger predefined actions. + +![ans](figures/ans.png) diff --git a/en/application-dev/notification/notification.md b/en/application-dev/notification/notification.md new file mode 100644 index 0000000000..a8822563cd --- /dev/null +++ b/en/application-dev/notification/notification.md @@ -0,0 +1,248 @@ + + +# Notification Development + +## When to Use + +OpenHarmony uses the Advanced Notification Service (ANS) to manage notifications, with support for various notification types, including text, long text, multi-text, image, social, and media. All system services and applications can send notifications through the notification API. Users can view all notifications on the system UI. + +Below are some typical use cases for notifications: + +- Display received SMS messages and instant messages. +- Display push messages of applications, such as advertisements and version updates. +- Display ongoing events, such as navigation information and download progress. + + + +## Notification Service Process + +The notification service process involves the ANS subsystem, notification sender, and notification subscriber. + +A notification is generated by the notification sender and sent to the ANS through inter-process communication (IPC). The ANS then distributes the notification to the notification subscriber. + +System applications also support notification-related configuration options, such as switches. The system configuration initiates a configuration request and sends the request to the ANS for storage in the memory and database. + +![1648113187545](figures/notification.png) + + + +## Available APIs + +Certain APIs can be invoked only by system applications that have been granted the **SystemCapability.Notification.Notification** permission. The APIs use either a callback or promise to return the result. The tables below list the APIs that use a callback, which provide same functions as their counterparts that use a promise. For details about the APIs, see the [API document](https://gitee.com/openharmony/docs/blob/master/en/application-dev/reference/apis/js-apis-notification.md). + +**Table 1** APIs for notification enabling + +| API | Description | +| ------------------------------------------------------------ | ---------------- | +| isNotificationEnabled(bundle: BundleOption, callback: AsyncCallback): void | Checks whether notification is enabled.| +| enableNotification(bundle: BundleOption, enable: boolean, callback: AsyncCallback): void | Sets whether to enable notification. | + +If the notification function of an application is disabled, it cannot send notifications. + + + +**Table 2** APIs for notification subscription + +| API | Description | +| ------------------------------------------------------------ | ---------------- | +| subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback): void | Subscribes to a notification with the subscription information specified.| +| subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback): void | Subscribes to all notifications. | +| unsubscribe(subscriber: NotificationSubscriber, callback: AsyncCallback): void | Unsubscribes from a notification. | + +The subscription APIs support subscription to all notifications or notifications from specific applications. + + + +**Table 3** Notification subscription callbacks + +| API | Description | +| ------------------------------------------------ | ---------------- | +| onConsume?:(data: SubscribeCallbackData) => void | Callback for receiving notifications. | +| onCancel?:(data: SubscribeCallbackData) => void | Callback for canceling notifications. | +| onUpdate?:(data: NotificationSortingMap) => void | Callback for notification sorting updates.| +| onConnect?:() => void; | Callback for subscription. | +| onDisconnect?:() => void; | Callback for unsubscription. | + + + +**Table 4** APIs for notification sending + +| API | Description | +| ------------------------------------------------------------ | ------------------------ | +| publish(request: NotificationRequest, callback: AsyncCallback): void | Publishes a notification. | +| publish(request: NotificationRequest, userId: number, callback: AsyncCallback): void | Publishes a notification to the specified user. | +| cancel(id: number, label: string, callback: AsyncCallback): void | Cancels a specified notification. | +| cancelAll(callback: AsyncCallback): void; | Cancels all notifications published by the application.| + +The **publish** API that carries **userId** can be used to publish notifications to subscribers of a specified user. + + + +## Development Guidelines + +The notification development process generally involves three aspects: subscribing to notifications, enabling the notification feature, and publishing notifications. + +### Modules to Import + +```js +import Notification from '@ohos.notification'; +``` + + + +### Subscribing to Notifications + +The notification recipient preferentially initiates a notification subscription request to the notification subsystem. + +```js +var subscriber = { + 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) { + console.info('===>onUpdate in test===>'); + }, + onConnect: function () { + console.info('===>onConnect in test===>'); + }, + onDisconnect: function () { + console.info('===>onDisConnect in test===>'); + }, + onDestroy: function () { + console.info('===>onDestroy in test===>'); + }, + }; + + Notification.subscribe(subscriber, (err, data) => { // This API uses an asynchronous callback to return the result. + if (err.code) { + console.error('===>failed to subscribe because ' + JSON.stringify(err)); + return; + } + console.info('===>subscribeTest success : ' + JSON.stringify(data)); + }); +``` + + + +### Publishing Notifications + +Before publishing a notification, make sure the notification feature is enabled for your application. This feature is disabled by default and can be enabled in the notification settings. + +##### Publishing Notifications + +To publish a notification, create a **NotificationRequest** object and set attributes such as the notification type, title, and content. In the following examples, a normal text notification and a notification containing a **WantAgent** are being published. + +Normal Text Notification + +```js +// Create a NotificationRequest object. +var notificationRequest = { + id: 1, + content: { + contentType: Notification.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + normal: { + title: "test_title", + text: "test_text", + additionalText: "test_additionalText" + } + } +} + +// Publish the notification. +Notification.publish(notificationRequest) .then((data) => { + console.info('===>publish promise success req.id : ' + notificationRequest.id); +}).catch((err) => { + console.error('===>publish promise failed because ' + JSON.stringify(err)); +}); +``` + + + +Notification Containing WantAgent. + +For details about how to use **WantAgent**, see [WantAgent Development](https://gitee.com/openharmony/docs/blob/master/en/application-dev/ability/wantagent.md). + +- Create a **WantAgent** object. + +```js +import wantAgent from '@ohos.wantAgent'; + +// WantAgentInfo object +var wantAgentInfo = { + wants: [ + { + bundleName: 'ohos.samples.eTSNotification', + abilityName: 'ohos.samples.eTSNotification.MainAbility', + } + ], + operationType: wantAgent.OperationType.START_ABILITY, + requestCode: 0, + wantAgentFlags:[wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG] +} + +// WantAgent object +var WantAgent; + +// getWantAgent callback +function getWantAgentCallback(err, data) { + console.info("===>getWantAgentCallback===>"); + if (err.code == 0) { + WantAgent = data; + } else { + console.info('----getWantAgent failed!----'); + } +} + +// Obtain the WantAgent object. +wantAgent.getWantAgent(wantAgentInfo, getWantAgentCallback) +``` + +- Publish the notification. + +```js +// Create a NotificationRequest object. +var notificationRequest = { + content: { + contentType: Notification.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, + normal: { + title: "AceApplication_Title", + text: "AceApplication_Text", + additionalText: "AceApplication_AdditionalText" + }, + }, + id: 1, + label: 'TEST', + wantAgent: WantAgent, + slotType: Notification.SlotType.OTHER_TYPES, + deliveryTime: new Date().getTime() +} + +// Publish the notification. +Notification.publish(notificationRequest) .then((data) => { + console.info('===>publish promise success req.id : ' + notificationRequest.id); +}).catch((err) => { + console.error('===>publish promise failed because ' + JSON.stringify(err)); +}); +``` + + + +- Cancel the notification. + +An application can cancel a single notification or all notifications. An application can cancel only the notifications published by itself. + +```js +// cancel callback +function cancelCallback(err) { + console.info("===>cancelCallback===>"); +} + +Notification.cancel(1, "label", cancelCallback) +``` + + diff --git a/en/application-dev/notification/public_sys-resources/icon-caution.gif b/en/application-dev/notification/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 GIT binary patch literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/public_sys-resources/icon-danger.gif b/en/application-dev/notification/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 GIT binary patch literal 580 zcmV-K0=xZ3Nk%w1VIu$?0Hp~4{QBgqmQ+MG9K51r{QB&)np^||1PlfQ%(86!{`~yv zv{XhUWKt}AZaiE{EOcHp{O-j3`t;<+eEiycJT4p@77X;(jQsMfB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/public_sys-resources/icon-note.gif b/en/application-dev/notification/public_sys-resources/icon-note.gif new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda GIT binary patch literal 394 zcmZ?wbhEHblx7fPSjxcg=ii?@_wH=jwxy=7CMGH-B`L+l$wfv=#>UF#$gv|VY%C^b zCQFtrnKN(Bo_%|sJbO}7RAORe!otL&qo<>yq_Sq+8Xqqo5h0P3w3Lvb5E(g{p01vl zxR@)KuDH0l^z`+-dH3eaw=XqSH7aTIx{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|> literal 0 HcmV?d00001 diff --git a/en/application-dev/notification/public_sys-resources/icon-notice.gif b/en/application-dev/notification/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 GIT binary patch literal 406 zcmV;H0crk6Nk%w1VIu$@0J8u9|NsB@_xJDb@8;&_*4Ea}&d#;9wWXz{jEszHYim+c zQaU<1At50E0000000000A^8Le000gEEC2ui03!e%000R7038S%NU)&51O^i-Tu6`s z0)`MFE@;3YqD6xSC^kTNu_J>91{PH8XfZ(p1pp2-SU@u3#{mEUC}_}tg3+I#{z}{Ok@D_ZUDg- zt0stin4;pC8M{WLSlRH*1pzqEw1}3oOskyNN?j;7HD{BBZ*OEcv4HK!6Bk6beR+04 z&8}k>SkTusVTDmkyOz#5fCA$JTPGJVQvr3uZ?QzzPQFvD0rGf_PdrcF`pMs}p^BcF zKtKTd`0wipR%nKN&Wj+V}pX;WC3SdJV!a_8Qi zE7z`U*|Y^H0^}fB$R?oG%6hQ z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000 z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{ z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4 literal 0 HcmV?d00001 diff --git a/en/application-dev/quick-start/package-structure.md b/en/application-dev/quick-start/package-structure.md index b9e4caa013..1b3d88f8b3 100644 --- a/en/application-dev/quick-start/package-structure.md +++ b/en/application-dev/quick-start/package-structure.md @@ -1,10 +1,24 @@ -# Directory Structure
-In an application development project, you need to declare the package structure of the application in the **config.json** file. -The following is an example of the configuration file: +# Application Package Structure Configuration File -``` +In an application development project, you need to declare the package structure of the application in the **config.json** file. + +## Internal Structure of the config.json File + +The **config.json** file consists of three mandatory tags, namely, **app**, **deviceConfig**, and ***module***. See Table 1 for details. + +Table 1 Internal structure of the config.json file + +| Tag | Description | Data Type| Default| +| ------------ | ------------------------------------------------------------ | -------- | ---------- | +| app | Global configuration of an application. Different HAP files of the same application must use the same **app** configuration. For details, see [Internal Structure of the app Tag](#Internal-structure-of-the-app-tag).| Object | No | +| deviceConfig | Application configuration applied to a specific type of device. For details, see [Internal Structure of the deviceconfig Tag](#Internal-structure-of-the-deviceconfig-tag).| Object | No | +| module | Configuration of a HAP file. The ***module*** configuration is valid only for the current HAP file. For details, see [Internal Structure of the module Tag](#Internal-structure-of-the-module-tag).| Object | No | + +Example of config.json: + +```json { "app": { "bundleName": "com.example.myapplication", @@ -27,7 +41,6 @@ The following is an example of the configuration file: "default" ], "distro": { - "deliveryWithInstall": true, "moduleName": "entry", "moduleType": "entry" }, @@ -67,9 +80,681 @@ The following is an example of the configuration file: } ``` -Note the following when declaring the package structure: +### Internal Structure of the app Tag + +The **app** tag contains the global configuration information of the application. For details about the internal structure, see Table 2. + +Table 2 Internal structure of the app tag + +| Attribute | Description | Data Type| Default | +| ---------- | ------------------------------------------------------------ | -------- | ------------------ | +| bundleName | Bundle name of the application. It uniquely identifies the application. The bundle name can contain only letters, digits, underscores (_), and periods (.). It must start with a letter. The value is a string with 7 to 127 bytes of a reverse domain name, for example, **com.example.myapplication**. It is recommended that the first level be the domain name suffix "com" and the second level be the vendor/individual name. More levels are also accepted.| String | No | +| vendor | Description of the application vendor. The value is a string with a maximum of 255 bytes. | String | Yes (initial value: left empty)| +| version | Version information of the application. For details, see Table 3. | Object | No | +| apiVersion | OpenHarmony API version on which the application depends. For details, see Table 4. | Object | Yes (initial value: left empty)| + +Table 3 Internal structure of version + +| Attribute | Description | Data Type| Default | +| ------------------------ | ------------------------------------------------------------ | -------- | -------------------------- | +| name | Application version number visible to users. The value can be customized and cannot exceed 127 bytes. The customization rules are as follows:
API 5 and earlier versions: A three-segment version number is recommended, for example, A.B.C (also compatible with A.B). In the version number, A, B, and C are integers ranging from 0 to 999. Other formats are not supported.
A indicates the major version number.
B indicates the minor version number.
C indicates the patch version number.
API 6 and later versions: A four-segment version number is recommended, for example, A.B.C.D. In the version number, A, B, and C are integers ranging from 0 to 99, and D is an integer ranging from 0 to 999.
A indicates the major version number.
B indicates the minor version number.
C indicates the feature version number.
D indicates the patch version number.| Number | No | +| code | Application version number used only for application management by OpenHarmony. This version number is not visible to users of the application. The value rules are as follows:
API 5 and earlier versions: It is a non-negative integer less than 32 bits in binary mode, converted from the value of version.name as follows: The conversion rules are as follows:
Value of **code** = A * 1,000,000 + B * 1,000 + C. For example, if the value of **version.name** is 2.2.1, the value of **code** is 2002001.
API 6 and later versions: The value of **code** is not associated with the value of **version.name** and can be customized. The value is a non-negative integer ranging from 2 to 31. Note that the value must be updated each time the application version is updated. The value for a later version must be greater than that for an earlier version.| Number | No | +| minCompatibleVersionCode | Minimum compatible version of the application. It is used to check whether the application is compatible with the version on other devices in the cross-device scenario.
The value rules are the same as those of **version.code**.| Number | No (initial value: **code** attribute value)| + +Table 4 Internal structure of apiVersion + +| Attribute | Description | Data Type| Default| +| ----------- | ----------------------------------------------------------- | -------- | ---------- | +| compatible | Minimum API version required for running the application. The value ranges from 0 to 2147483647. | Integer | Yes | +| target | Target API version required for running the application. The value ranges from 0 to 2147483647.| Integer | Yes | +| releaseType | Type of the target API version required for running the application. | String | Yes | + +Example of the app tag structure: + +```json +"app": { + "bundleName": "com.example.myapplication", + "vendor": "example", + "version": { + "code": 1, + "name": "1.0" + }, + "apiVersion": { + "compatible": 4, + "target": 5, + "releaseType": "Beta1" + } + } +``` + +### Internal Structure of the deviceConfig Tag + +The **deviceConfig** tag contains the application configuration information on the device, including attributes such as **default**, **tv**, **car**, **wearable**, and **liteWearable**. The **default** configuration applies to all types of devices. You need to declare the peculiar configuration of a specific device type in the associated sub-tag of this type. For details about the internal structure, see Table 5. + +Table 5 Internal structure of the deviceConfig tag + +| Attribute | Description | Data Type| Default | +| ------------ | ----------------------------------------------- | -------- | ------------------ | +| default | Application configuration applied to all types of devices. See Table 6. | Object | No | +| tablet | Application configuration specific to tablets. See Table 6. | Object | Yes (initial value: left empty)| +| tv | Application configuration specific to smart TVs. See Table 6. | Object | Yes (initial value: left empty)| +| car | Application configuration specific to head units. See Table 6. | Object | Yes (initial value: left empty)| +| wearable | Application configuration specific to wearables. See Table 6. | Object | Yes (initial value: left empty)| +| liteWearable | Application configuration specific to lite wearables. See Table 6.| Object | Yes (initial value: left empty)| + +For details about the internal structures of device attributes, see Table 6. + +Table 6 Internal structure of device attributes + +| Attribute | Description | Data Type| Default | +| ------------------ | ------------------------------------------------------------ | -------- | ----------------------- | +| process | Name of the process running the application or ability. If the **process** attribute is configured in the **deviceConfig** tag, all abilities of the application run in this process. You can set the **process** attribute for a specific ability in the **abilities** attribute, so that the ability can run in the particular process. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device types. The value can contain a maximum of 31 characters. | String | Yes | +| supportBackup | Whether the application supports backup and restoration. If this attribute is set to **false**, backup or restoration will not be performed for the application.
This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | Boolean | Yes (initial value: **false**)| +| compressNativeLibs | Whether the **libs** libraries are packaged in the HAP file after being compressed. If this attribute is set to **false**, the **libs** libraries are stored without being compressed and will be directly loaded during the installation of the HAP file.
This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | Boolean | Yes (initial value: **true**) | +| directLaunch | Whether the application can be started when the device is locked. If you want to start the application without unlocking the device, set this attribute to **true**. Devices running OpenHarmony do not support this attribute.| Boolean | Yes (initial value: **false**)| +| ark | Maple configuration. See Table 7. | Object | Yes (initial value: left empty) | +| network | Network security configuration. You can customize the network security settings of the application in the security statement of the configuration file without modifying the application code. See Table 9.| Object | Yes (initial value: left empty) | + +Table 7 Internal structure of the **ark** attribute + +| Attribute | Description | Data Type| Default | +| ---------- | -------------------------------- | -------- | ------------------------------ | +| reqVersion | Maple version required for the application. For details, see Table 8.| Object | No | +| flag | Type of the Maple application. | String | No (available options: **m**, **mo**, **z**).| + +Table 8 Internal structure of the reqVersion attribute + +| Attribute | Description | Data Type| Default| +| ---------- | --------------------------------------------------------- | -------- | ---------- | +| compatible | Minimum Maple version required for the application. The value is a 32-bit unsigned integer.| Integer | No | +| target | Type of the Maple application. The value is a 32-bit unsigned integer. | Integer | No | + +Table 9 Internal structure of the network attribute + +| Attribute | Description | Data Type| Default | +| ---------------- | ------------------------------------------------------------ | -------- | ----------------------- | +| cleartextTraffic | Whether to allow the application to use plaintext traffic, for example, plaintext HTTP traffic.
**true**: The application is allowed to use plaintext traffic.
**false**: The application is not allowed to use plaintext traffic.| Boolean | Yes (initial value: **false**)| +| securityConfig | Network security configuration of the application. For details, see Table 10. | Object | Yes (initial value: left empty) | + +Table 10 Internal structure of the securityConfig attribute + +| Attribute | Sub-attribute | Description | Data Type| Default | +| -------------- | ------------------ | ------------------------------------------------------------ | -------- | ---------------- | +| domainSettings | - | Security settings of the custom network domain. This attribute allows nested domains. To be more specific, the **domainSettings** object of a large domain can be nested with the **domainSettings** objects of small network domains.| Object| Yes (initial value: left empty)| +| | cleartextPermitted | Whether plaintext traffic can be transmitted in the custom network domain. If both **cleartextTraffic** and **security** are declared, whether plaintext traffic can be transmitted in the custom network domain is determined by the **cleartextPermitted** attribute.
**true**: Plaintext traffic can be transmitted.
**false**: Plaintext traffic cannot be transmitted.| Boolean| No | +| | domains | Domain name configuration. This attribute consists of the **subdomains** and **name** sub-attributes.
**subdomains** (boolean): specifies whether the domain name contains subdomains. If this sub-attribute is set to **true**, the domain naming convention applies to all related domains and subdomains (including the lower-level domains of the subdomains). Otherwise, the convention applies only to exact matches.
**name** (string): indicates the domain name.| Object array| No | + +Example of the deviceConfig tag structure: + +```json +"deviceConfig": { + "default": { + "process": "com.example.test.example", + "supportBackup": false, + "network": { + "cleartextTraffic": true, + "securityConfig": { + "domainSettings": { + "cleartextPermitted": true, + "domains": [ + { + "subdomains": true, + "name": "example.ohos.com" + } + ] + } + } + } + } +} +``` + +### Internal Structure of the module Tag + +The **module** tag contains the configuration information of the HAP file. For details about the internal structure, see Table 11. + +Table 11 Internal structure of the module tag + +| Attribute | Description | Data Type | Default | +| --------------- | ------------------------------------------------------------ | ---------- | ------------------------------------------------------------ | +| mainAbility | Ability displayed on the Service Center icon. When the resident process is started, the **mainAbility** is started.| String | No if any ability using the Page template exists | +| package | Structure name of the HAP file. The value must be unique in the application. The value is a string with a maximum of 127 bytes, in the reverse domain name notation. It is recommended that the value be the same as the project directory of the HAP file. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | No | +| name | Class name of the HAP file. The value is in the reverse domain name notation. The prefix must be the same as the package name specified by the **package** label at the same level. The value can also start with a period (.). The value is a string with a maximum of 255 bytes.
This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | No | +| description | Description of the HAP file. The value is a string with a maximum of 255 bytes. If the value exceeds the limit or needs to support multiple languages, you can use a resource index to the description. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: left empty) | +| supportedModes | Mode supported by the application. Currently, only the **drive** mode is defined. This attribute applies only to head units.| String array| Yes (initial value: left empty) | +| deviceType | Type of device on which the abilities can run. The device types predefined in the system include **tablet**, **tv**, **car**, **wearable**, and **liteWearable**. | String array| No | +| distro | Distribution description of the current HAP file. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. For details, see Table 12. | Object | No | +| metaData | Metadata of the HAP file. For details, see Table 13. | Object | Yes (initial value: left empty) | +| abilities | All abilities in the current module. The value is an array of objects, each of which represents a shortcut object. For details, see Table 17.| Object array | Yes (initial value: left empty) | +| js | A set of JS modules developed using the ArkUI framework. Each element in the set represents the information about a JS module. For details, see Table 22.| Object array | Yes (initial value: left empty) | +| shortcuts | Shortcut information of the application. The value is an array of objects, each of which represents a shortcut object. For details, see Table 25.| Object array | Yes (initial value: left empty) | +| reqPermissions | Permissions that the application applies for from the system before its running. For details, see Table 21. | Object array | Yes (initial value: left empty) | +| colorMode | Color mode of the application.
**dark**: Resources applicable for the dark mode are selected.
**light**: Resources applicable for the light mode are selected.
**auto**: Resources are selected based on the color mode of the system.
This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: **auto**) | +| distroFilter | Application distribution rules.
This attribute defines the rules for distributing HAP files based on different device specifications, so that precise matching can be performed when AppGallery distributes applications. Applications can be distributed by API version, screen shape, or screen resolution. During distribution, a unique HAP is determined based on the mapping between **deviceType** and these three factors. For details, see Table 29. | Object | Yes (initial value: left empty) Configure this attribute when an application has multiple entry modules.| +| reqCapabilities | Device capabilities required for running the application. | String array| Yes (initial value: left empty) | +| commonEvents | Static broadcast. For details, see Table 35. | Object array | Yes (initial value: left empty) | +| allowClassMap | Metadata of the HAP file. The value can be **true** or **false**. If the value is **true**, the HAP file uses the Java object proxy mechanism provided by the OpenHarmony framework. | Boolean | No (initial value: **false**) | +| entryTheme | Keyword of an OpenHarmony internal topic. Set it to the resource index of the name.| String | Yes (initial value: left empty) | + +Example of the module tag structure: + +```json +"module": { + "mainAbility": "MainAbility", + "package": "com.example.myapplication.rntry", + "name": ".MyOHOSAbilityPackage", + "description": "$string:description_application", + "supportModes": [ + "drive" + ], + "deviceType": [ + "car" + ], + "distro": { + "moduleName": "ohos_entry", + "moduleType": "entry" + }, + "abilities": [ + ... + ], + "shortcuts": [ + ... + ], + "js": [ + ... + ], + "reqPermissions": [ + ... + ], + "colorMode": "light" +} +``` + +Table 12 Internal structure of the distro attribute + +| Attribute | Description | Data Type| Default| +| ---------------- | ------------------------------------------------------------ | -------- | ---------- | +| moduleName | Name of the current HAP file. The maximum length is 31 characters. | String | No | +| moduleType | Type of the current HAP file. The value can be **entry** or **feature**. For the HAR type, set this attribute to **har**.| String | No | +| installationFree | Whether the HAP file supports the installation-free feature.
**true**: The HAP file supports the installation-free feature and meets installation-free constraints.
**false**: The HAP file does not support the installation-free feature.
Pay attention to the following:
When **entry.hap** is set to **true**, all **feature.hap** fields related to **entry.hap **must be **true**.
When **entry.hap** is set to **false**, **feature.hap** related to **entry.hap** can be set to **true** or **false** based on service requirements.| Boolean | No | + +Example of the distro attribute structure: + +```json +"distro": { + "moduleName": "ohos_entry", + "moduleType": "entry", + "installationFree": true +} +``` + +Table 13 Internal structure of the metaData attribute + +| Attribute | Description | Data Type| Default | +| ------------- | ------------------------------------------------------------ | -------- | -------------------- | +| parameters | Metadata of the parameters to be passed for calling the ability. The metadata of each parameter consists of the **description**, **name**, and **type** sub-attributes. For details, see Table 14.| Object array| Yes (initial value: left empty) | +| results | Metadata of the ability return value. The metadata of each return value consists of the **description**, **name**, and **type** sub-attributes. For details, see Table 15.| Object array| Yes (initial value: left empty)| +| customizeData | Custom metadata of the parent component. **parameters** and **results** cannot be configured in **application**. For details, see Table 16.| Object array| Yes (initial value: left empty)| + +Table 14 Internal structure of the parameters attribute + +| Attribute | Description | Data Type| Default | +| ----------- | ------------------------------------------------------------ | -------- | ------------------ | +| description | Description of the parameter. The value can be a string or a resource index to descriptions in multiple languages. The value can contain a maximum of 255 characters.| String | Yes (initial value: left empty)| +| name | Name of the parameter. The value can contain a maximum of 255 characters. | String | Yes (initial value: left empty)| +| type | Type of the parameter, for example, **Integer**. | String | No | + +Table 15 Internal structure of the results attribute + +| Attribute | Description | Data Type| Default | +| ----------- | ------------------------------------------------------------ | -------- | -------------------- | +| description | Description of the return value. The value can be a string or a resource index to descriptions in multiple languages. The value can contain a maximum of 255 characters.| String | Yes (initial value: left empty)| +| name | Name of the return value. The value can contain a maximum of 255 characters. | String | Yes (initial value: left empty)| +| type | Type of the return value, for example, **Integer**. | String | No | + +Table 16 Internal structure of the customizeData attribute + +| Attribute| Description | Data Type| Default | +| -------- | ---------------------------------------------------------- | -------- | -------------------- | +| name | Key of a data element. The value is a string with a maximum of 255 bytes. | String | Yes (initial value: left empty)| +| value | Value of a data element. The value is a string with a maximum of 255 bytes. | String | Yes (initial value: left empty)| +| extra | Custom format of the data element. The value is an index to the resource that identifies the data.| String | Yes (initial value: left empty)| + +Example of the metaData attribute structure: + +```json +"metaData": { + "parameters" : [{ + "name" : "string", + "type" : "Float", + "description" : "$string:parameters_description" + }], + "results" : [{ + "name" : "string", + "type" : "Float", + "description" : "$string:results_description" + }], + "customizeData" : [{ + "name" : "string", + "value" : "string", + "extra" : "$string:customizeData_description" + }] +} +``` + +Table 17 Internal structure of the abilities attribute + +| Attribute | Description | Data Type | Default | +| ---------------- | ------------------------------------------------------------ | ---------- | -------------------------------------------------------- | +| process | Name of the process running the application or ability. If the **process** attribute is configured in the **deviceConfig** tag, all abilities of the application run in this process. You can set the **process** attribute for a specific ability in the **abilities** attribute, so that the ability can run in the particular process. If this attribute is set to the name of the process running other applications, all these applications can run in the same process, provided they have the same unified user ID and the same signature. Devices running OpenHarmony do not support this attribute.| String | Yes (initial value: left empty) | +| name | Name of the ability. The value is a reverse domain name, in the format of "*Bundle name*.*Class name*", for example, **"com.example.myapplication.MainAbility"**. Alternatively, the value can start with a period (.) followed by the class name, for example, **".MainAbility"**.
The ability name must be unique in an application. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types.
Note: When you use DevEco Studio to create a project, the configuration of the first ability is generated by default, including the **MainAbility.java** file and the class name **MainAbility** defaulted in the **name** string for the **abilities** attribute in **config.json**. The value of this attribute can be customized if you use other IDE tools. The value can contain a maximum of 127 characters. | String | No | +| description | Description of the ability. The value can be a string or a resource index to descriptions in multiple languages. The value can contain a maximum of 255 characters.| String | Yes (initial value: left empty) | +| icon | Index to the ability icon file. Example value: **$media:ability_icon**. In the **skills** attribute of the ability, if the **actions** value contains **action.system.home** and the **entities** value contains **entity.system.home**, the icon of the ability is also used as the icon of the application. If multiple abilities address this condition, the icon of the first candidate ability is used as the application icon.
Note: The **icon** and **label** values of an application are visible to users. Ensure that at least one of them is different from any existing icons or labels.| String | Yes (initial value: left empty) | +| label | Ability name visible to users. The value can be a name string or a resource index to names in multiple languages. In the **skills** attribute of the ability, if the **actions** value contains **action.system.home** and the **entities** value contains **entity.system.home**, the label of the ability is also used as the label of the application. If multiple abilities address this condition, the label of the first candidate ability is used as the application label.
Note: The **icon** and **label** values of an application are visible to users. Ensure that at least one of them is different from any existing icons or labels. The value can be a reference to a string defined in a resource file or a string enclosed in brackets ({}). The value can contain a maximum of 255 characters.| String | Yes (initial value: left empty) | +| uri | Uniform Resource Identifier (URI) of the ability. The value can contain a maximum of 255 characters. | String | Yes (No for abilities using the Data template) | +| launchType | Startup type of the ability. The value can be **standard**, **singleMission**, or **singleton**.
**standard**: Multiple **Ability** instances can be created during startup.
Most abilities can use this type.
**singleMission**: Only a single **Ability** instance can be created in each task stack during startup.
**singleton**: Only a single **Ability** instance can be created across all task stacks during startup. For example, a globally unique incoming call screen uses the singleton startup type. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: **standard**) | +| visible | Whether the ability can be called by other applications.
**true**: The ability can be called by other applications.
**false**: The ability cannot be called by other applications.| Boolean | Yes (initial value: **false**) | +| permissions | Permissions required for abilities of another application to call the current ability, generally in the format of a reverse domain name. The value can be either the permissions predefined in the OS or your custom permissions.| String array| Yes (initial value: left empty) | +| skills | Types of the **want** that can be accepted by the ability. | Object array | Yes (initial value: left empty) | +| deviceCapability | Device capabilities required to run the ability.| String array| Yes (initial value: left empty) | +| metaData | Metadata. For details, see Table 13. | Object | Yes (initial value: left empty) | +| type | Type of the ability. Available values are as follows:
**page**: FA developed using the Page template to provide the capability of interacting with users.
**service**: PA developed using the Service template to provide the capability of running tasks in the background.
**data**: PA developed using the Data template to provide unified data access for external systems.
**CA**: ability that can be started by other applications as a window.| String | No | +| orientation | Display orientation of the ability. This attribute applies only to the ability using the Page template. Available values are as follows:
unspecified: indicates that the system automatically determines the display orientation of the ability.
**landscape**: indicates the landscape orientation.
**portrait**: indicates the portrait orientation.
**followRecent**: indicates that the orientation follows the most recent application in the stack.| String | Yes (initial value: **unspecified**) | +| backgroundModes | Background service type of the ability. You can assign multiple background service types to a specific ability. This attribute applies only to the ability using the Service template. Available values are as follows:
**dataTransfer**: service for downloading, backing up, sharing, or transferring data from the network or peer devices
**audioPlayback**: audio playback service
**audioRecording**: audio recording service
**pictureInPicture**: picture in picture (PiP) and small-window video playback services
**voip**: voice/video call and VoIP services
**location**: location and navigation services
**bluetoothInteraction**: Bluetooth scanning, connection, and transmission services
**wifiInteraction**: WLAN scanning, connection, and transmission services
**screenFetch**: screen recording and screenshot services
**multiDeviceConnection**: multi-device interconnection service| String array| Yes (initial value: left empty) | +| grantPermission | Whether permissions can be granted for any data in the ability. | Boolean | Yes (initial value: left empty) | +| readPermission | Permission required for reading data in the ability. This attribute applies only to the ability using the Data template. The value is a string with a maximum of 255 bytes. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: left empty) | +| writePermission | Permission required for writing data to the ability. This attribute applies only to the ability using the Data template. The value is a string with a maximum of 255 bytes. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: left empty) | +| configChanges | System configurations that the ability concerns. Upon any changes on the concerned configurations, the **onConfigurationUpdated** callback will be invoked to notify the ability. Available values are as follows:
**mcc**: indicates that the mobile country code (MCC) of the IMSI is changed. Typical scenario: A SIM card is detected, and the MCC is updated.
**mnc**: indicates that the mobile network code (MNC) of the IMSI is changed. Typical scenario: A SIM card is detected, and the MNC is updated.
**locale**: indicates that the locale is changed. Typical scenario: The user has selected a new language for the text display of the device.
**layout**: indicates that the screen layout is changed. Typical scenario: Currently, different display forms are all in the active state.
**fontSize**: indicates that font size is changed. Typical scenario: A new global font size is set.
**orientation**: indicates that the screen orientation is changed. Typical scenario: The user rotates the device.
**density**: indicates that the display density is changed. Typical scenario: The user may specify different display ratios, or different display forms are active at the same time.
**size**: indicates that the size of the display window is changed.
**smallestSize**: indicates that the length of the shorter side of the display window is changed.
**colorMode**: indicates that the color mode is changed.| String array| Yes (initial value: left empty) | +| mission | Task stack of the ability. This attribute applies only to the ability using the Page template. By default, all abilities in an application belong to the same task stack. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: bundle name of the application) | +| targetAbility | Target ability that this ability alias points to. This attribute applies only to the ability using the Page template. If the **targetAbility** attribute is set, only **name**, **icon**, **label**, **visible**, **permissions**, and **skills** take effect in the current ability (ability alias). Other attributes use the values of the **targetAbility** attribute. The target ability must belong to the same application as the alias and must be declared in **config.json** ahead of the alias. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | String | Yes (initial value: left empty, indicating that the current ability is not an alias)| +| multiUserShared | Whether the ability supports data sharing among multiple users. This attribute applies only to the ability using the Data template. If this attribute is set to **true**, only one copy of data is stored for multiple users. Note that this attribute will invalidate the **visible** attribute. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | Boolean | Yes (initial value: **false**) | +| supportPipMode | Whether the ability allows the user to enter the Picture in Picture (PiP) mode. The PiP mode enables the user to watch a video in a small window that hovers on top of a full screen window (main window). This attribute applies only to the ability using the Page template. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. | Boolean | Yes (initial value: **false**) | +| formsEnabled | Whether the ability can provide forms. This attribute applies only to the ability using the Page template.
**true**: This ability can provide forms.
**false**: This ability cannot provide forms.| Boolean | Yes (initial value: **false**) | +| forms | Details about the forms used by the ability. This attribute is valid only when **formsEnabled** is set to **true**. For details, see Table 27.| Object array | Yes (initial value: left empty) | +| srcLanguage | Programming language used to develop the ability. | String | The value can be **java**, **js**, or **ets**. | +| srcPath | Path of the JS code and components corresponding to the ability. | String | Yes (initial value: left empty) | +| uriPermission | Application data that the ability can access. This attribute consists of the **mode** and **path** sub-attributes. This attribute is valid only for the capability of the type provider. Devices running OpenHarmony do not support this attribute. For details, see Table 18.| Object | Yes (initial value: left empty) | + +Table 18 Internal structure of the uriPermission attribute + +| Attribute| Description | Data Type| Default | +| -------- | ----------------------- | -------- | ------------------------- | +| path | Path identified by **uriPermission**.| String | No | +| mode | Mode matching the **uriPeimission**.| String | Yes (initial value: *default***)| + +Example of the abilities attribute structure: + +```json +"abilities": [ + { + "name": ".MainAbility", + "description": "test main ability", + "icon": "$media:ic_launcher", + "label": "$media:example", + "launchType": "standard", + "orientation": "unspecified", + "permissions": [ + ], + "visible": true, + "skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ] + } + ], + "configChanges": [ + "locale", + "layout", + "fontSize", + "orientation" + ], + "type": "page" + }, + { + "name": ".PlayService", + "description": "example play ability", + "icon": "$media:ic_launcher", + "label": "$media:example", + "launchType": "standard", + "orientation": "unspecified", + "visible": false, + "skills": [ + { + "actions": [ + "action.play.music", + "action.stop.music" + ], + "entities": [ + "entity.audio" + ] + } + ], + "type": "service", + "backgroundModes": [ + "audioPlayback" + ] + }, + { + "name": ".UserADataAbility", + "type": "data", + "uri": "dataability://com.example.world.test.UserADataAbility", + "visible": true + } +] +``` + +Table 19 Internal structure of the skills attribute + +| Attribute| Description | Data Type | Default | +| -------- | ------------------------------------------------------------ | ---------- | -------------------- | +| actions | Actions of the **want** that can be accepted by the ability. Generally, the value is an **action** value predefined in the system.| String array| Yes (initial value: left empty)| +| entities | Entities of the **want** that can be accepted by the ability, such as video and Home application.| String array| Yes (initial value: left empty)| +| uris | URIs of the **want** that can be accepted by the ability. For details, see Table 20.| Object array | Yes (initial value: left empty)| + +Table 20 Internal structure of the uris attribute + +| Attribute | Description | Data Type| Default | +| ------------- | -------------------------- | -------- | -------------------- | +| scheme | Scheme in the URI. | String | No | +| host | Host in the URI. | String | Yes (initial value: left empty)| +| port | Port number in the URI. | String | Yes (initial value: left empty)| +| pathStartWith | **pathStartWith** value in the URI.| String | String | +| path | Path in the URI. | String | Yes (initial value: left empty)| +| pathRegx | **pathRegx** value in the URI. | String | Yes (initial value: left empty)| +| type | Type of the URI. | String | Yes (initial value: left empty)| + +Example of the skills attribute structure: + +```json +"skills": [ + { + "actions": [ + "action.system.home" + ], + "entities": [ + "entity.system.home" + ], + "uris": [ + { + "scheme": "http", + "host": "www.example.com", + "port": "8080", + "path": "query/student/name", + "type": "text/*" + } + ] + } +] +``` + +Table 21 reqPermissions + +| Attribute | Description | **Type**| **Value Range** | **Default Value** | **Restrictions** | +| --------- | ------------------------------------------------------------ | -------- | ----------------------------------------------------------- | ---------------------- | ------------------------------------------------------------ | +| name | Permission name, which is mandatory. | String | Custom | None | Parsing will fail if this field is not set. | +| reason | Reason for applying for the permission, which is mandatory only when applying for the **user_grant** permission.| String | The displayed text cannot exceed 256 bytes. | Empty | This field is mandatory for the **user_grant** permission. If it is left empty, application release will be rejected. Multi-language adaptation is required.| +| usedScene | Description of the application scenario and timing for using the permission, which is mandatory only when applying for the **user_grant** permission. This attribute consists of the **ability** and **when** sub-attributes. Multiple abilities can be configured.| Object | **ability**: ability name; **when**: **inuse** or **always**| **ability**: left empty; **when**: **inuse**| The **ability** sub-attribute is mandatory for the **user_grant** permission, and the **when** field is optional. | + +Table 22 Internal structure of the js attribute + +| Attribute| Description | Data Type| Default | +| -------- | ------------------------------------------------------------ | -------- | ------------------------ | +| name | Name of a JavaScript component. The default value is **default**. | String | No | +| pages | Route information about all pages in the JavaScript component, including the page path and page name. The value is an array, in which each element represents a page. The first element in the array represents the home page of the JavaScript FA.| Array | No | +| window | Window-related configurations. This attribute applies only to the default, tablet, smart TV, head unit, and wearable device type types. For details, see Table 23. | Object | Yes | +| type | Type of the JavaScript component. Available values are as follows:
**normal**: indicates that the JavaScript component is an application instance.
**form**: indicates that the JavaScript component is a widget instance.| String | Yes (initial value: **normal**)| +| mode | Development mode of the JavaScript component. For details, see Table 24. | Object | Yes (initial value: left empty) | + +Table 23 Internal structure of the window attribute + +| Attribute | Description | Data Type| Default | +| --------------- | ------------------------------------------------------------ | -------- | ----------------------- | +| designWidth | Baseline width for page design, in pixels. The size of an element is scaled by the actual device width.| Number | Yes (initial value: 720px) | +| autoDesignWidth | Whether to automatically calculate the baseline width for page design. If it is set to **true**, the **designWidth** attribute becomes invalid. The baseline width is calculated based on the device width and screen density.| Boolean| Yes (initial value: **false**)| + +Table 24 Internal structure of the **mode** attribute + +| Attribute| Description | Data Type | Default | +| -------- | -------------------- | ----------------------------------- | --------------------------- | +| type | Type of the JavaScript component.| String. The value can be **pageAbility** or **form**.| Yes (initial value: **pageAbility**)| +| syntax | Syntax type of the JavaScript component.| String. The value can be **hml** or **ets**. | Yes (initial value: **hml**) | + +Example of the js attribute structure: + +```json +"js": [ + { + "name": "default", + "pages": [ + "pages/index/index", + "pages/detail/detail" + ], + "window": { + "designWidth": 720, + "autoDesignWidth": false + }, + "type": "form" + } +] +``` + +Table 25 Internal structure of the shortcuts attribute + +| Attribute | Description | Data Type| Default | +| ---------- | ------------------------------------------------------------ | -------- | ------------------ | +| shortcutId | Shortcut ID. The value is a string with a maximum of 63 bytes. | String | No | +| label | Label of the shortcut, that is, the text description displayed by the shortcut. The value can be a string or a resource index to the description. The value is a string with a maximum of 63 bytes.| String | Yes (initial value: left empty)| +| icon | Icon of the shortcut. The value is a resource index to the description. | String | Yes (initial value: left empty)| +| intents | Intents to which the shortcut points. The attribute consists of the **targetClass** and **targetBundle** sub-attributes. For details, see Table 26.| Object array| Yes (initial value: left empty)| + +Table 26 Internal structure of the intents attribute + +| Attribute | Description | Data Type| Default | +| ------------ | --------------------------------------- | -------- | -------------------- | +| targetClass | Class name for the target ability of the shortcut. | String | Yes (initial value: left empty)| +| targetBundle | Application bundle name for the target ability of the shortcut.| String | Yes (initial value: left empty)| + +Example of the shortcuts attribute structure: + +```json +"shortcuts": [ + { + "shortcutId": "id", + "label": "$string:shortcut", + "intents": [ + { + "targetBundle": "com.example.world.test", + "targetClass": "com.example.world.test.entry.MainAbility" + } + ] + } +] +``` + +Table 27 Internal structure of the forms attribute + +| Attribute | Description | Data Type | Default | +| ------------------- | ------------------------------------------------------------ | ---------- | ------------------------ | +| name | Class name of the widget. The value is a string with a maximum of 127 bytes. | String | No | +| description | Description of the widget. The value can be a string or a resource index to descriptions in multiple languages. The value is a string with a maximum of 255 bytes.| String | Yes (initial value: left empty) | +| isDefault | Whether the widget is a default one. Each ability has only one default widget.
**true**: The widget is the default one.
**false**: The widget is not the default one.| Boolean | No | +| type | Type of the widget. Available values are as follows:
**Java**: indicates a Java-programmed widget.
**JS**: indicates a JavaScript-programmed widget.| String | No | +| colorMode | Color mode of the widget. Available values are as follows:
**auto**: The widget adopts the auto-adaptive color mode.
**dark**: The widget adopts the dark color mode.
**light**: The widget adopts the light color mode.| String | Yes (initial value: **auto**)| +| supportDimensions | Grid styles supported by the widget. Available values are as follows:
1 * 2: indicates a grid with one row and two columns.
2 * 2: indicates a grid with two rows and two columns.
2 * 4: indicates a grid with two rows and four columns.
4 * 4: indicates a grid with four rows and four columns.| String array| No | +| defaultDimension | Default grid style of the widget. The value must be available in the **supportDimensions** array of the widget.| String | No | +| landscapeLayouts | Landscape layouts for the grid styles. Values in this array must correspond to the values in the **supportDimensions** array. This field is required only by Java-programmed widgets.| String array| No | +| portraitLayouts | Portrait layouts for the grid styles. Values in this array must correspond to the values in the **supportDimensions** array. This field is required only by Java-programmed widgets.| String array| No | +| updateEnabled | Whether the widget can be updated periodically. Available values are as follows:
**true**: The widget can be updated periodically, depending on the update way you select, either at a specified interval (**updateDuration**) or at the scheduled time (**scheduledUpdateTime**). **updateDuration** is preferentially recommended.
**false**: The widget cannot be updated periodically.| Boolean | No | +| scheduledUpdateTime | Scheduled time to update the widget. The value is in 24-hour format and accurate to minute. | String | Yes (initial value: **0:0**) | +| updateDuration | Interval to update the widget. The value is a natural number, in the unit of 30 minutes.
If the value is **0**, this field does not take effect.
If the value is a positive integer ***N***, the interval is calculated by multiplying ***N*** and 30 minutes.| Number | Yes (initial value: **0**) | +| formConfigAbility | Link to a specific page of the application. The value is a URI. | String | Yes (initial value: left empty) | +| formVisibleNotify | Whether the widget is allowed to use the widget visibility notification. | String | Yes (initial value: left empty) | +| jsComponentName | Component name of the widget. The value is a string with a maximum of 127 bytes. This attribute is required only by JavaScript-programmed widgets.| String | No | +| metaData | Metadata of the widget. This attribute contains the array of the **customizeData** attribute. For details, see Table 13. | Object | Yes (initial value: left empty) | +| customizeData | Custom information about the widget. For details, see Table 28. | Object array | Yes (initial value: left empty) | + +Table 28 Internal structure of the customizeData attribute + +| Attribute| Description | Data Type| Default | +| -------- | --------------------------------------------------- | -------- | -------------------- | +| name | Name in the custom name-value pair. The value is a string with a maximum of 255 bytes. | String | Yes (initial value: left empty)| +| value | Value in the custom name-value pair. The value is a string with a maximum of 255 bytes. | String | Yes (initial value: left empty)| +| extra | Format of the current custom data. The value is the resource value of **extra**.| String | Yes (initial value: left empty)| + +Example of the forms attribute structure: + +```json +"forms": [ + { + "name": "Form_Js", + "description": "It's Js Form", + "type": "JS", + "jsComponentName": "card", + "colorMode": "auto", + "isDefault": true, + "updateEnabled": true, + "scheduledUpdateTime": "11:00", + "updateDuration": 1, + "defaultDimension": "2*2", + "supportDimensions": [ + "2*2", + "2*4", + "4*4" + ] + }, + { + "name": "Form_Java", + "description": "It's Java Form", + "type": "Java", + "colorMode": "auto", + "isDefault": false, + "updateEnabled": true, + "scheduledUpdateTime": "21:05", + "updateDuration": 1, + "defaultDimension": "1*2", + "supportDimensions": [ + "1*2" + ], + "landscapeLayouts": [ + "$layout:ability_form" + ], + "portraitLayouts": [ + "$layout:ability_form" + ], + "formConfigAbility": "ability://com.example.myapplication.fa/.MainAbility", + "metaData": { + "customizeData": [ + { + "name": "originWidgetName", + "value": "com.example.weather.testWidget" + } + ] + } + } +] +``` + +Table 29 Internal structure of the distroFilter attribute + +| Attribute | Description | Data Type| Default| +| ------------- | ------------------------------------------------------------ | -------- | ---------- | +| apiVersion | Supported API versions. For details, see Table 30. | Object | No | +| screenShape | Supported screen shapes. For details, see Table 31. | Object array| No | +| screenWindow | Supported window resolutions when the application is running. This attribute applies only to the lite wearables. For details, see Table 32.| Object array| No | +| screenDensity | Pixel density of the screen, in dots per inch (DPI). For details, see Table 33. | Object array| No | +| countryCode | Country code used during application distribution. For details, see the ISO-3166-1 standard. Multiple enumerated values of countries and regions are supported. For details, see Table 34.| Object array| No | + +Table 30 Internal structure of the apiVersion attribute + +| Attribute| Description | Data Type| Default | +| -------- | ------------------------------------------------------------ | -------- | -------------------- | +| policy | Blocklist and trustlist rule of the sub-attribute value. Set this attribute to **exclude** or **include**.**include** indicates that the sub-attribute value is in the trustlist. If the value matches any of the **value** enums, it matches this attribute.| String | Yes (initial value: left empty)| +| value | An integer of the existing API version, for example, 4, 5, or 6. Example: If an application uses two software versions developed using API 5 and API 6 for the same device model, two installation packages of the entry type can be released.| Array | Yes (initial value: left empty)| + +Table 31 Internal structure of the screenShape attribute + +| Attribute| Description | Data Type| Default | +| -------- | ------------------------------------------------------------ | -------- | -------------------- | +| policy | Blocklist and trustlist rule of the sub-attribute value. Set this attribute to **exclude** or **include**.**include** indicates that the sub-attribute value is in the trustlist. If the value matches any of the **value** enums, it matches this attribute.| String | Yes (initial value: left empty)| +| value | The value can be **circle** or **rect**. Example: Different HAPs can be provided for a smart watch with a circular face and that with a rectangular face.| Array | Yes (initial value: left empty)| + +Table 32 Internal structure of the screenWindow attribute + +| Attribute| Description | Data Type| Default | +| -------- | ------------------------------------------------------------ | -------- | -------------------- | +| policy | Blocklist and trustlist rule of the sub-attribute value. Set this attribute to **exclude** or **include**.**include** indicates that the sub-attribute value is in the trustlist. If the value matches any of the **value** enums, it matches this attribute.| String | Yes (initial value: left empty)| +| value | Width and height of the screen. The value of a single string is in the format of Width x Height in pixels, for example, **454*454**.| Array | Yes (initial value: left empty)| + +Table 33 Internal structure of the screenDensity attribute + +| Attribute| Description | Data Type| Default | +| -------- | ------------------------------------------------------------ | -------- | -------------------- | +| policy | Blocklist and trustlist rule of the sub-attribute value. Set this attribute to **exclude** or **include**.**include** indicates that the sub-attribute value is in the trustlist. If the value matches any of the **value** enums, it matches this attribute.| String | Yes (initial value: left empty)| +| value | Available values are as follows:
**sdpi**: screen density with small-scale dots per inch (SDPI). This value is applicable for devices with a DPI range of (0, 120].
**mdpi**: screen density with medium-scale dots per inch (MDPI). This value is applicable for devices with a DPI range of (120, 160].
**ldpi**: screen density with large-scale dots per inch (LDPI). This value is applicable for devices with a DPI range of (160, 240].
**xldpi**: screen density with extra-large-scale dots per inch (XLDPI). This value is applicable for devices with a DPI range of (240, 320].
**xxldpi**: screen density with extra-extra-large-scale dots per inch (XXLDPI). This value is applicable for devices with a DPI range of (320, 480].
**xxxldpi**: screen density with extra-extra-extra-large-scale dots per inch (XXXLDPI). This value is applicable for devices with a DPI range of (480, 640].| Array | Yes (initial value: left empty)| + +Table 34 Internal structure of the countryCode attribute + +| Attribute| Description | Data Type | Default | +| -------- | ------------------------------------------------------------ | ---------- | -------------------- | +| policy | Blocklist and trustlist rule of the sub-attribute value. Set this attribute to **exclude** or **include**.**include** indicates that the sub-attribute value is in the trustlist. If the value matches any of the **value** enums, it matches this attribute.| String | Yes (initial value: left empty)| +| value | Country code of the area to which the application is to be distributed. The value is a string array, of which each substring indicates a country or region. The substring consists of two uppercase letters.| String array| Yes (initial value: left empty)| + +Example of the distroFilter attribute structure: + +```json +"distroFilter": { + "apiVersion": { + "policy": "include", + "value": [4,5] + }, + "screenShape": { + "policy": "include", + "value": ["circle","rect"] + }, + "screenWindow": { + "policy": "include", + "value": ["454*454","466*466"] + }, + "screenDensity":{ + "policy": "exclude", + "value": ["ldpi","xldpi"] + }, + "countryCode": { + "policy":"include", + "value":["CN", "HK"] + } +} +``` + +Table 35 Internal structure of the commonEvents attribute -- The value of **package** must be unique for the applications with the same **bundleName**. -- Only one ability can be declared in the **abilities** field. -- The **name** field under **abilities** must be unique for the applications with the same **bundleName**. +| Attribute | Description | Data Type | Default | +| ---------- | ------------------------------------------------------------ | ---------- | ------------------ | +| name | Name of a static broadcast. | String | No | +| permission | Permission that needs to be applied for to implement the static common event. | String array| Yes (initial value: left empty)| +| data | Additional data array to be carried by the current static common event. | String array| Yes (initial value: left empty)| +| type | Type array of the current static common event. | String array| Yes (initial value: left empty)| +| events | A set of events for the wants that can be received. The value can be system predefined or custom.| String array| No | +Example of the commonEvents attribute structure: + +```json +"commonEvents": [ + { + "name":"MainAbility", + "permission": "string", + "data":[ + "string", + "string" + ], + "events": [ + "string", + "string" + ] + } +] +``` diff --git a/zh-cn/application-dev/background-task-management/background-task-dev-guide.md b/zh-cn/application-dev/background-task-management/background-task-dev-guide.md index 4635a0b01a..92e3d3c99b 100644 --- a/zh-cn/application-dev/background-task-management/background-task-dev-guide.md +++ b/zh-cn/application-dev/background-task-management/background-task-dev-guide.md @@ -120,7 +120,7 @@ ohos.permission.KEEP_BACKGROUND_RUNNING | MULTI_DEVICE_CONNECTION | 6 | 多设备互联 | multiDeviceConnection | | WIFI_INTERACTION | 7 | WLAN相关(系统保留) | wifiInteraction | | VOIP | 8 | 音视频通话(系统保留) | voip | -| TASK_KEEPING | 9 | 计算任务(仅供PC使用) | taskKeeping | +| TASK_KEEPING | 9 | 计算任务(仅供特定设备使用) | taskKeeping | ## 开发步骤 diff --git a/zh-cn/application-dev/background-task-management/background-task-overview.md b/zh-cn/application-dev/background-task-management/background-task-overview.md index 7ade1cd904..78cf56ca90 100644 --- a/zh-cn/application-dev/background-task-management/background-task-overview.md +++ b/zh-cn/application-dev/background-task-management/background-task-overview.md @@ -28,11 +28,11 @@ - **申请时机**:允许应用在前台时,或退后台在被挂起之前(应用退到后台默认有6~12秒的运行时长,具体时长由系统根据具体场景决定)申请延迟挂起,否则可能被挂起(Suspend),导致申请失败。 -- **超时**:延迟挂起超时(Timeout),系统通过回调知会应用,应用需要取消对应的延迟挂起,或再次申请延迟挂起。超期不取消或不处理,该应用会被强制取消延迟挂起。 +- **超时**:延迟挂起即将超时(Timeout),系统通过回调知会应用,应用需要取消对应的延迟挂起。如果超时不取消,该应用会被强制杀掉。 -- **取消时机**:任务完成后申请方应用主动取消延时申请,不要等到超时后被系统取消,否则会影响该应用的后台允许运行时长配额。 +- **取消时机**:任务完成后申请方应用应该主动取消延迟挂起,不要等到系统回调后再取消,否则会影响该应用的后台允许运行时长配额。 -- **配额机制**:为了防止应用滥用保活,或者申请后不取消,每个应用每天都会有一定配额(会根据用户的使用习惯动态调整),配额消耗完就不再允许申请短时任务,所以应用完成短时任务后立刻取消延时申请,避免消耗配额。(注,这个配额指的是申请的时长,系统默认应用在后台运行的时间不计算在内)。 +- **配额机制**:为了防止应用滥用保活,或者申请后不取消,每个应用每天都会有一定配额(会根据用户的使用习惯动态调整),配额消耗完就不再允许申请短时任务,所以应用完成短时任务后立刻取消延迟挂起,避免消耗配额。(注,这个配额指的是申请的时长,系统默认应用在后台运行的时间不计算在内)。 ## 长时任务 长时任务给用户能够直观感受到的且需要一直在后台运行的业务提供后台运行生命周期的保障。比如:业务需要在后台播放声音、需要在后台持续导航定位等。此类用户可以直观感知到的后台业务行为,可以通过使用长时任务对应的后台模式保障业务在后台的运行,支撑应用完成在后台的业务。 @@ -52,7 +52,7 @@ OpenHarmony提供了九种后台模式,供需要在后台做长时任务的业 | multiDeviceConnection | 分布式互联任务 | 正在运行分布式任务 | | | wifiInteraction | WLAN传输 | 正在运行WLAN相关任务 | SystemApi,仅对System权限应用开放 | | voip | 音视频电话、VOIP | 正在运行通话相关任务 | SystemApi,仅对System权限应用开放 | -| taskKeeping | 计算任务 | 正在运行计算任务 | PC特有,仅在PC申请生效 | +| taskKeeping | 计算任务 | 正在运行计算任务 | 仅在特定设备生效 | ### 长时任务使用约束 - 如果用户选择可感知业务(如播音、导航等),触发对应后台模式,在任务启动时,系统会强制弹出通知提醒用户。 -- GitLab