提交 b44ec598 编写于 作者: G Gloria

Update docs against 13383+13235

Signed-off-by: wusongqing<wusongqing@huawei.com>
上级 2fc4f937
...@@ -78,6 +78,5 @@ The **module.json5** of a browser application is as follows: ...@@ -78,6 +78,5 @@ The **module.json5** of a browser application is as follows:
4. If **type** in the passed **want** parameter is specified and is included in **type** under **skills**, the matching is successful. 4. If **type** in the passed **want** parameter is specified and is included in **type** under **skills**, the matching is successful.
2. When there are multiple matching applications, a dialog box is displayed for you to select one of them. 2. When there are multiple matching applications, a dialog box is displayed for you to select one of them.
<img src="figures/stage-want1.png" alt="stage-want1" style="zoom:80%;" />
<img src="figures/stage-want1.png" alt="stage-want1" style="zoom:80%;" />
\ No newline at end of file
...@@ -55,4 +55,3 @@ When an application is switched to the background, it is cached in the backgroun ...@@ -55,4 +55,3 @@ When an application is switched to the background, it is cached in the backgroun
} }
``` ```
<!--no_check-->
\ No newline at end of file
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
The [action](../reference/apis/js-apis-ability-wantConstant.md#wantconstantaction) field specifies the common operation (such as viewing, sharing, and application details) to be performed by the caller. In implicit Want, you can define this field and use it together with **uri** or **parameters** to specify the operation to be performed on the data, for example, viewing URI data. For example, if the URI is a website and the action is **ohos.want.action.viewData**, the ability that supports website viewing is matched. Declaring the **action** field in Want indicates that the invoked application should support the declared operation. The **actions** field under **skills** in the configuration file indicates the operations supported by the application. The [action](../reference/apis/js-apis-ability-wantConstant.md#wantconstantaction) field specifies the common operation (such as viewing, sharing, and application details) to be performed by the caller. In implicit Want, you can define this field and use it together with **uri** or **parameters** to specify the operation to be performed on the data, for example, viewing URI data. For example, if the URI is a website and the action is **ohos.want.action.viewData**, the ability that supports website viewing is matched. Declaring the **action** field in Want indicates that the invoked application should support the declared operation. The **actions** field under **skills** in the configuration file indicates the operations supported by the application.
**Common action Values** **Common action Values**
...@@ -15,6 +16,7 @@ The [action](../reference/apis/js-apis-ability-wantConstant.md#wantconstantactio ...@@ -15,6 +16,7 @@ The [action](../reference/apis/js-apis-ability-wantConstant.md#wantconstantactio
The [entities](../reference/apis/js-apis-ability-wantConstant.md#wantconstantentity) field specifies the additional category information (such as browser and video player) of the target ability. It is a supplement to **action** in implicit Want. You can define this field to filter application categories, for example, browser. Declaring the **entities** field in Want indicates that the invoked application should belong to the declared category. The **entities** field under **skills** in the configuration file indicates the categories supported by the application. The [entities](../reference/apis/js-apis-ability-wantConstant.md#wantconstantentity) field specifies the additional category information (such as browser and video player) of the target ability. It is a supplement to **action** in implicit Want. You can define this field to filter application categories, for example, browser. Declaring the **entities** field in Want indicates that the invoked application should belong to the declared category. The **entities** field under **skills** in the configuration file indicates the categories supported by the application.
**Common entities Values** **Common entities Values**
......
...@@ -13,8 +13,8 @@ Due to the differences in the thread model and process model, certain APIs (mark ...@@ -13,8 +13,8 @@ Due to the differences in the thread model and process model, certain APIs (mark
import fa from '@ohos.ability.featureAbility'; import fa from '@ohos.ability.featureAbility';
let parameter = { let parameter = {
"want": { "want": {
bundleName: "ohos.samples.demo", bundleName: "com.example.myapplication",
abilityName: "ohos.samples.demo.MainAbility" abilityName: "com.example.myapplication.EntryAbility"
} }
} }
fa.startAbility(parameter).then((data) => { fa.startAbility(parameter).then((data) => {
...@@ -30,8 +30,8 @@ Due to the differences in the thread model and process model, certain APIs (mark ...@@ -30,8 +30,8 @@ Due to the differences in the thread model and process model, certain APIs (mark
// context is a member of the ability object and is required for invoking inside a non-ability object. // context is a member of the ability object and is required for invoking inside a non-ability object.
// Pass in the Context object. // Pass in the Context object.
let wantInfo = { let wantInfo = {
bundleName: "ohos.samples.demo", bundleName: "com.example.myapplication",
abilityName: "ohos.samples.demo.MainAbility" abilityName: "EntryAbility"
}; };
this.context.startAbility(wantInfo).then((data) => { this.context.startAbility(wantInfo).then((data) => {
console.info('startAbility success.'); console.info('startAbility success.');
......
...@@ -28,4 +28,3 @@ OpenHarmony has reconstructed the [deviceConfig](../quick-start/deviceconfig-str ...@@ -28,4 +28,3 @@ OpenHarmony has reconstructed the [deviceConfig](../quick-start/deviceconfig-str
| compressNativeLibs | Whether the **libs** libraries are packaged in the HAP file after being compressed.| / | This configuration is not supported in the stage model.| | compressNativeLibs | Whether the **libs** libraries are packaged in the HAP file after being compressed.| / | This configuration is not supported in the stage model.|
| network | Network security configuration.| / | This configuration is not supported in the stage model.| | network | Network security configuration.| / | This configuration is not supported in the stage model.|
<!--no_check-->
\ No newline at end of file
...@@ -38,4 +38,3 @@ When developing an application, you may need to configure certain tags to identi ...@@ -38,4 +38,3 @@ When developing an application, you may need to configure certain tags to identi
To request component permissions, set the **reqPermission** field under **module** in the **config.json** file. This field declares the name of the permission to request, the reason for requesting the permission, and the scenario where the permission is used. For details about the configuration, see [reqPermission](../quick-start/module-structure.md). To request component permissions, set the **reqPermission** field under **module** in the **config.json** file. This field declares the name of the permission to request, the reason for requesting the permission, and the scenario where the permission is used. For details about the configuration, see [reqPermission](../quick-start/module-structure.md).
<!--no_check-->
\ No newline at end of file
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
When developing an application, you may need to configure certain tags to identify the application, such as the bundle name and application icon. This topic describes key tags that need to be configured during application development. Icons and labels are usually configured together. There is the application icon, application label, entry icon, and entry label, which correspond to the **icon** and **label** fields in the [app.json5 file](../quick-start/app-configuration-file.md) and [module.json5 file](../quick-start/module-configuration-file.md). The application icon and label are used in **Settings**. For example, they are displayed in the application list in **Settings**. The entry icon is displayed on the device's home screen after the application is installed. The entry icon maps to a [UIAbility](uiability-overview.md) component. Therefore, an application can have multiple entry icons and labels. When you touch one of them, the corresponding UIAbility page is displayed. When developing an application, you may need to configure certain tags to identify the application, such as the bundle name and application icon. This topic describes key tags that need to be configured during application development. Icons and labels are usually configured together. There is the application icon, application label, entry icon, and entry label, which correspond to the **icon** and **label** fields in the [app.json5 file](../quick-start/app-configuration-file.md) and [module.json5 file](../quick-start/module-configuration-file.md). The application icon and label are used in **Settings**. For example, they are displayed in the application list in **Settings**. The entry icon is displayed on the device's home screen after the application is installed. The entry icon maps to a [UIAbility](uiability-overview.md) component. Therefore, an application can have multiple entry icons and labels. When you touch one of them, the corresponding UIAbility page is displayed.
**Figure 1** Icons and labels
**Figure 1** Icons and labels
![application-component-configuration-stage](figures/application-component-configuration-stage.png) ![application-component-configuration-stage](figures/application-component-configuration-stage.png)
...@@ -71,4 +70,3 @@ When developing an application, you may need to configure certain tags to identi ...@@ -71,4 +70,3 @@ When developing an application, you may need to configure certain tags to identi
The **requestPermission** field in the [module.json5 file](../quick-start/module-configuration-file.md) is used to configure the permission information required by the module to access the protected part of the system or other applications. This field declares the name of the permission to request, the reason for requesting the permission, and the scenario where the permission is used. The **requestPermission** field in the [module.json5 file](../quick-start/module-configuration-file.md) is used to configure the permission information required by the module to access the protected part of the system or other applications. This field declares the name of the permission to request, the reason for requesting the permission, and the scenario where the permission is used.
<!--no_check-->
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<img src="figures/context-holding.png" alt="context-holding" style="zoom:50%;" /> <img src="figures/context-holding.png" alt="context-holding" style="zoom:50%;" />
- The following describes the information provided by different contexts. - The following describes the information provided by different contexts.
- [UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md): Each UIAbility has the **Context** attribute, which provides APIs to operate the ability, obtain the ability configuration, request permissions from users, and more. - [UIAbilityContext](../reference/apis/js-apis-inner-application-uiAbilityContext.md): Each UIAbility has the **Context** attribute, which provides APIs to operate the ability, obtain the ability configuration, and more.
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
...@@ -65,15 +65,10 @@ This topic describes how to use the context in the following scenarios: ...@@ -65,15 +65,10 @@ This topic describes how to use the context in the following scenarios:
- [Obtaining the Application Development Path](#obtaining-the-application-development-path) - [Obtaining the Application Development Path](#obtaining-the-application-development-path)
- [Obtaining and Modifying Encrypted Areas](#obtaining-and-modifying-encrypted-areas) - [Obtaining and Modifying Encrypted Areas](#obtaining-and-modifying-encrypted-areas)
- [Creating Context of Another Application or Module](#creating-context-of-another-application-or-module) - [Creating Context of Another Application or Module](#creating-context-of-another-application-or-module)
- [Subscribing to Ability Lifecycle Changes in a Process](#subscribing-to-ability-lifecycle-changes-in-a-process) - [Subscribing to Ability Lifecycle Changes in a Process](#subscribing-to-ability-lifecycle-changes-in-a-process)
- [Requesting Permissions from Users Through AbilityContext](#requesting-permissions-from-users-through-uiabilitycontext)
### Obtaining the Application Development Path ### Obtaining the Application Development Path
...@@ -180,9 +175,9 @@ The base class **Context** provides the [createBundleContext(bundleName:string)] ...@@ -180,9 +175,9 @@ The base class **Context** provides the [createBundleContext(bundleName:string)]
> - Request the **ohos.permission.GET_BUNDLE_INFO_PRIVILEGED** permission. For details, see [Permission Application Guide](../security/accesstoken-guidelines.md#declaring-permissions-in-the-configuration-file). > - Request the **ohos.permission.GET_BUNDLE_INFO_PRIVILEGED** permission. For details, see [Permission Application Guide](../security/accesstoken-guidelines.md#declaring-permissions-in-the-configuration-file).
> >
> - This is a system API and cannot be called by third-party applications. > - This is a system API and cannot be called by third-party applications.
For example, application information displayed on the home screen includes the application name and icon. The home screen application calls the foregoing method to obtain the context information, so as to obtain the resource information including the application name and icon. For example, application information displayed on the home screen includes the application name and icon. The home screen application calls the foregoing method to obtain the context information, so as to obtain the resource information including the application name and icon.
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
...@@ -194,8 +189,8 @@ The base class **Context** provides the [createBundleContext(bundleName:string)] ...@@ -194,8 +189,8 @@ The base class **Context** provides the [createBundleContext(bundleName:string)]
// ... // ...
} }
} }
``` ```
- Call **createModuleContext(bundleName:string, moduleName:string)** to obtain the context of a specified module of another application. After obtaining the context, you can obtain the resource information of that module. - Call **createModuleContext(bundleName:string, moduleName:string)** to obtain the context of a specified module of another application. After obtaining the context, you can obtain the resource information of that module.
> **NOTE** > **NOTE**
> >
...@@ -204,7 +199,7 @@ The base class **Context** provides the [createBundleContext(bundleName:string)] ...@@ -204,7 +199,7 @@ The base class **Context** provides the [createBundleContext(bundleName:string)]
> - Request the **ohos.permission.GET_BUNDLE_INFO_PRIVILEGED** permission. For details, see [Permission Application Guide](../security/accesstoken-guidelines.md#declaring-permissions-in-the-configuration-file). > - Request the **ohos.permission.GET_BUNDLE_INFO_PRIVILEGED** permission. For details, see [Permission Application Guide](../security/accesstoken-guidelines.md#declaring-permissions-in-the-configuration-file).
> >
> - This is a system API and cannot be called by third-party applications. > - This is a system API and cannot be called by third-party applications.
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
...@@ -217,7 +212,7 @@ The base class **Context** provides the [createBundleContext(bundleName:string)] ...@@ -217,7 +212,7 @@ The base class **Context** provides the [createBundleContext(bundleName:string)]
} }
} }
``` ```
- Call **createModuleContext(moduleName:string)** to obtain the context of another module in the current application. After obtaining the context, you can obtain the resource information of that module. - Call **createModuleContext(moduleName:string)** to obtain the context of another module in the current application. After obtaining the context, you can obtain the resource information of that module.
```ts ```ts
...@@ -242,7 +237,7 @@ When the ability lifecycle changes in a process, for example, being created or d ...@@ -242,7 +237,7 @@ When the ability lifecycle changes in a process, for example, being created or d
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
const TAG: string = "[Example].[Entry].[EntryAbility]"; const TAG: string = "[Example].[Entry].[EntryAbility]";
...@@ -298,14 +293,3 @@ export default class EntryAbility extends UIAbility { ...@@ -298,14 +293,3 @@ export default class EntryAbility extends UIAbility {
} }
} }
``` ```
### Requesting Permissions from Users Through UIAbilityContext
Each ability has the **Context** attribute. The ability is used to process the lifecycle. Methods use to operate the ability (such as **startAbility()**, **connectServiceExtensionAbility()**, and **terminateSelf()**) are implemented in the corresponding context. The context also provides methods for obtaining the ability configuration and requesting permissions from users. For details about how to obtain the context, see [Obtaining the Context of UIAbility](uiability-usage.md#obtaining-the-context-of-uiability).
When an application needs to obtain users' privacy information or use system capabilities, for example, to obtain location information, to access the calendar, or to use the camera to take photos or record videos, the application must request permissions from users, as shown below. For details, see [Permission Application Guide](../security/accesstoken-guidelines.md).
**Figure 2** Requesting the permission to access the calendar from users
<img src="figures/application-context-stage.png" alt="application-context-stage" style="zoom:50%;" />
\ No newline at end of file
...@@ -58,4 +58,3 @@ The table below describes their differences in detail. ...@@ -58,4 +58,3 @@ The table below describes their differences in detail.
| **Mission management model**| - A mission is created for each PageAbility component instance.<br>- Missions are stored persistently until the number of missions exceeds the maximum (customized based on the product configuration) or users delete missions.<br>- PageAbility components do not form a stack structure.<br>For details, see [Mission Management Scenarios](mission-management-overview.md).| - A mission is created for each UIAbility component instance.<br>- Missions are stored persistently until the number of missions exceeds the maximum (customized based on the product configuration) or users delete missions.<br>- UIAbility components do not form a stack structure.<br>For details, see [Mission Management Scenarios](mission-management-overview.md).| | **Mission management model**| - A mission is created for each PageAbility component instance.<br>- Missions are stored persistently until the number of missions exceeds the maximum (customized based on the product configuration) or users delete missions.<br>- PageAbility components do not form a stack structure.<br>For details, see [Mission Management Scenarios](mission-management-overview.md).| - A mission is created for each UIAbility component instance.<br>- Missions are stored persistently until the number of missions exceeds the maximum (customized based on the product configuration) or users delete missions.<br>- UIAbility components do not form a stack structure.<br>For details, see [Mission Management Scenarios](mission-management-overview.md).|
| **Application configuration file**| The **config.json** file is used to describe the application, HAP, and application component information.<br>For details, see [Application Configuration File Overview (FA Model)](../quick-start/application-configuration-file-overview-fa.md).| The **app.json5** file is used to describe the application information, and the **module.json5** file is used to describe the HAP and application component information.<br>For details, see [Application Configuration File Overview (Stage Model)](../quick-start/application-configuration-file-overview-stage.md).| | **Application configuration file**| The **config.json** file is used to describe the application, HAP, and application component information.<br>For details, see [Application Configuration File Overview (FA Model)](../quick-start/application-configuration-file-overview-fa.md).| The **app.json5** file is used to describe the application information, and the **module.json5** file is used to describe the HAP and application component information.<br>For details, see [Application Configuration File Overview (Stage Model)](../quick-start/application-configuration-file-overview-stage.md).|
<!--no_check-->
\ No newline at end of file
...@@ -12,15 +12,15 @@ A UIAbility accesses a ServiceAbility in the same way as it accesses a ServiceEx ...@@ -12,15 +12,15 @@ A UIAbility accesses a ServiceAbility in the same way as it accesses a ServiceEx
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
export default class MainAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want, launchParam) {
console.info("MainAbility onCreate"); console.info("EntryAbility onCreate");
} }
onDestroy() { onDestroy() {
console.info("MainAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage) {
console.info("MainAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
let want = { let want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "ServiceAbility", abilityName: "ServiceAbility",
...@@ -40,13 +40,13 @@ export default class MainAbility extends UIAbility { ...@@ -40,13 +40,13 @@ export default class MainAbility extends UIAbility {
let connectionId = this.context.connectServiceExtensionAbility(want, options); let connectionId = this.context.connectServiceExtensionAbility(want, options);
} }
onWindowStageDestroy() { onWindowStageDestroy() {
console.info("MainAbility onWindowStageDestroy") console.info("EntryAbility onWindowStageDestroy")
} }
onForeground() { onForeground() {
console.info("MainAbility onForeground") console.info("EntryAbility onForeground")
} }
onBackground() { onBackground() {
console.info("MainAbility onBackground") console.info("EntryAbility onBackground")
} }
} }
``` ```
......
...@@ -25,7 +25,7 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol ...@@ -25,7 +25,7 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol
- **Before starting a component of another application, verify the visible field of the target component.** - **Before starting a component of another application, verify the visible field of the target component.**
- This rule applies only to cross-application scenarios. - This rule applies only to cross-application scenarios.
- If the **visible** field of the target component is **false**, verify the **ohos.permission.START_INVISIBLE_ABILITY** permission. - If the **visible** field of the target component is **false**, verify the **ohos.permission.START_INVISIBLE_ABILITY** permission.
- For details, see [Component Visible Configuration](../quick-start/module-configuration-file.md#abilities-tag) - For details, see [Component Visible Configuration](../quick-start/module-configuration-file.md#abilities).
- **Before starting a component of a background application, verify the BACKGROUND permission.** - **Before starting a component of a background application, verify the BACKGROUND permission.**
- An application is considered as a foreground application only when the application process gains focus or its UIAbility component is running in the foreground. - An application is considered as a foreground application only when the application process gains focus or its UIAbility component is running in the foreground.
...@@ -67,4 +67,3 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol ...@@ -67,4 +67,3 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol
![component-startup-rules](figures/component-startup-inter-fa.png) ![component-startup-rules](figures/component-startup-inter-fa.png)
<!--no_check-->
\ No newline at end of file
...@@ -24,7 +24,7 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol ...@@ -24,7 +24,7 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol
- **Before starting a component of another application, verify the visible field of the target component.** - **Before starting a component of another application, verify the visible field of the target component.**
- If the **visible** field of the target component is **false**, verify the **ohos.permission.START_INVISIBLE_ABILITY** permission. - If the **visible** field of the target component is **false**, verify the **ohos.permission.START_INVISIBLE_ABILITY** permission.
- For details, see [Component Visible Configuration](../quick-start/module-configuration-file.md#abilities-tag) - For details, see [Component Visible Configuration](../quick-start/module-configuration-file.md#abilities).
- **Before starting a component of a background application, verify the BACKGROUND permission.** - **Before starting a component of a background application, verify the BACKGROUND permission.**
- An application is considered as a foreground application only when the application process gains focus or its UIAbility component is running in the foreground. - An application is considered as a foreground application only when the application process gains focus or its UIAbility component is running in the foreground.
...@@ -62,4 +62,3 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol ...@@ -62,4 +62,3 @@ In view of this, OpenHarmony formulates a set of component startup rules, as fol
![component-startup-rules](figures/component-startup-inter-stage.png) ![component-startup-rules](figures/component-startup-inter-stage.png)
<!--no_check-->
\ No newline at end of file
...@@ -4,4 +4,3 @@ The application configuration file contains information about the application co ...@@ -4,4 +4,3 @@ The application configuration file contains information about the application co
The application project code developed based on the FA model contains a **config.json** file. For details about common configuration items, see [Application- or Component-Level Configuration](application-component-configuration-fa.md). For details about the file, see [Application Configuration File Overview (FA Model)](../quick-start/application-configuration-file-overview-fa.md). The application project code developed based on the FA model contains a **config.json** file. For details about common configuration items, see [Application- or Component-Level Configuration](application-component-configuration-fa.md). For details about the file, see [Application Configuration File Overview (FA Model)](../quick-start/application-configuration-file-overview-fa.md).
<!--no_check-->
\ No newline at end of file
...@@ -4,4 +4,3 @@ The application configuration file contains information about the application co ...@@ -4,4 +4,3 @@ The application configuration file contains information about the application co
The application project code developed based on the stage model contains one **app.json5** file and one or more **module.json5** files. For details about common configuration items, see [Application- or Component-Level Configuration (Stage Model)](application-component-configuration-stage.md). For details about the two files, see [Application Configuration File Overview (Stage Model)](../quick-start/application-configuration-file-overview-stage.md). The application project code developed based on the stage model contains one **app.json5** file and one or more **module.json5** files. For details about common configuration items, see [Application- or Component-Level Configuration (Stage Model)](application-component-configuration-stage.md). For details about the two files, see [Application Configuration File Overview (Stage Model)](../quick-start/application-configuration-file-overview-stage.md).
<!--no_check-->
\ No newline at end of file
...@@ -9,4 +9,3 @@ The stage model uses the [app.json5](../quick-start/app-configuration-file.md) a ...@@ -9,4 +9,3 @@ The stage model uses the [app.json5](../quick-start/app-configuration-file.md) a
**Figure 1** Configuration file differences **Figure 1** Configuration file differences
![comparison-of-configuration-file](figures/comparison-of-configuration-file.png) ![comparison-of-configuration-file](figures/comparison-of-configuration-file.png)
<!--no_check-->
\ No newline at end of file
...@@ -30,7 +30,7 @@ export default { ...@@ -30,7 +30,7 @@ export default {
``` ```
After the PageAbility is created, its abilities-related configuration items are displayed in the **config.json** file. The following is an example **config.json** file of an ability named MainAbility: After the PageAbility is created, its abilities-related configuration items are displayed in the **config.json** file. The following is an example **config.json** file of an ability named EntryAbility:
```json ```json
{ {
...@@ -48,13 +48,13 @@ After the PageAbility is created, its abilities-related configuration items are ...@@ -48,13 +48,13 @@ After the PageAbility is created, its abilities-related configuration items are
], ],
"orientation": "unspecified", "orientation": "unspecified",
"visible": true, "visible": true,
"srcPath": "MainAbility", "srcPath": "EntryAbility",
"name": ".MainAbility", "name": ".EntryAbility",
"srcLanguage": "ets", "srcLanguage": "ets",
"icon": "$media:icon", "icon": "$media:icon",
"description": "$string:MainAbility_desc", "description": "$string:EntryAbility_desc",
"formsEnabled": false, "formsEnabled": false,
"label": "$string:MainAbility_label", "label": "$string:EntryAbility_label",
"type": "page", "type": "page",
"launchType": "singleton" "launchType": "singleton"
} }
...@@ -65,6 +65,7 @@ After the PageAbility is created, its abilities-related configuration items are ...@@ -65,6 +65,7 @@ After the PageAbility is created, its abilities-related configuration items are
In the FA model, you can call **getContext** of **featureAbility** to obtain the application context and then use the capabilities provided by the context. In the FA model, you can call **getContext** of **featureAbility** to obtain the application context and then use the capabilities provided by the context.
**Table 1** featureAbility APIs **Table 1** featureAbility APIs
| API| Description| | API| Description|
......
...@@ -59,4 +59,3 @@ The following is an example **config.json** file: ...@@ -59,4 +59,3 @@ The following is an example **config.json** file:
For details about the configuration items, see [Internal Structure of module](../quick-start/module-structure.md). For details about the configuration items, see [Internal Structure of module](../quick-start/module-structure.md).
<!--no_check-->
\ No newline at end of file
# Matching Rules of Explicit Want and Implicit Want # Matching Rules of Explicit Want and Implicit Want
Both explicit Want and implicit Want can be used to match an ability to start based on certain rules. These rules determine how the parameters set in Want match the configuration file declared by the target ability. Both explicit Want and implicit Want can be used to match an ability to start based on certain rules. These rules determine how the parameters set in Want match the configuration file declared by the target ability.
## Matching Rules of Explicit Want
The table below describes the matching rules of explicit Want.
- **Matching rules of explicit Want** | Name| Type| Matching Item| Mandatory| Rule Description|
| -------- | -------- | -------- | -------- | -------- |
| Name| Type| Matching Item| Mandatory| Rule Description| | deviceId | string | Yes| No| If this field is unspecified, only abilities on the local device are matched.|
| -------- | -------- | -------- | -------- | -------- | | bundleName | string | Yes| Yes| If **abilityName** is specified but **bundleName** is unspecified, the matching fails.|
| deviceId | string | Yes| No| If this field is unspecified, only abilities on the local device are matched.| | moduleName | string | Yes| No| If this field is unspecified and multiple modules with the same ability name exist in the application, the first ability is matched by default.|
| bundleName | string | Yes| Yes| If **abilityName** is specified but **bundleName** is unspecified, the matching fails.| | abilityName | string | Yes| Yes| To use explicit Want, this field must be specified.|
| moduleName | string | Yes| No| If this field is unspecified and multiple modules with the same ability name exist in the application, the first ability is matched by default.| | uri | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
| abilityName | string | Yes| Yes| To use explicit Want, this field must be specified.| | type | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
| uri | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.| | action | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
| type | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.| | entities | Array&lt;string&gt; | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
| action | string | No| No| This field is not used for matching. It is passed to the target ability as a parameter.| | flags | number | No| No| This field is not used for matching and is directly transferred to the system for processing. It is generally used to set runtime information, such as URI data authorization.|
| entities | Array&lt;string&gt; | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
| flags | number | No| No| This field is not used for matching and is directly transferred to the system for processing. It is generally used to set runtime information, such as URI data authorization.|
| parameters | {[key:&nbsp;string]:&nbsp;any} | No| No| This field is not used for matching. It is passed to the target ability as a parameter.| | parameters | {[key:&nbsp;string]:&nbsp;any} | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
- **Matching rules for implicit Want**
| Name| Type| Matching Item| Mandatory| Rule Description|
| -------- | -------- | -------- | -------- | -------- |
| deviceId | string | Yes| No| Implicit invoking is not supported across devices.|
| abilityName | string | No| No| To use implicit Want, this field must be left unspecified.|
| bundleName | string | Yes| No| - When only **bundleName** is specified, matching is limited to that application.<br>- When both **bundleName** and **moduleName** are specified, matching is limited to that module in that application.<br>- When only **moduleName** is specified, the setting is invalid.<br>For details, see [Interpretation of Implicit Want Matching Rules](#interpretation-of-implicit-want-matching-rules). |
| moduleName | string | Yes| No||
| uri | string | Yes| No||
| type | string | Yes| No||
| action | string | Yes| No||
| entities | Array&lt;string&gt; | Yes| No||
| flags | number | No| No| This field is not used for matching and is directly transferred to the system for processing. It is generally used to set runtime information, such as URI data authorization.|
| parameters | {[key:&nbsp;string]:&nbsp;any} | No| No| This field is not used for matching. It is passed to the target ability as a parameter.|
## Matching Rules for Implicit Want
## Interpretation of Implicit Want Matching Rules The table below describes the matching rules of implicit Want.
| Name | Type | Matching Item| Mandatory| Rule Description |
| ----------- | ------------------------------ | ------ | ---- | ------------------------------------------------------------ |
| deviceId | string | Yes | No | Implicit invoking is not supported across devices. |
| abilityName | string | No | No | To use implicit Want, this field must be left unspecified. |
| bundleName | string | Yes | No | - When only **bundleName** is specified, matching is limited to that application.<br>- When both **bundleName** and **moduleName** are specified, matching is limited to that module in that application.<br>- When only **moduleName** is specified, the setting is invalid.<br> <br>These fields will be used for implicit matching.|
| moduleName | string | Yes | No | |
| uri | string | Yes | No | |
| type | string | Yes | No | |
| action | string | Yes | No | |
| entities | Array&lt;string&gt; | Yes | No | |
| flags | number | No | No | This field is not used for matching and is directly transferred to the system for processing. It is generally used to set runtime information, such as URI data authorization.|
| parameters | {[key:&nbsp;string]:&nbsp;any} | No | No | This field is not used for matching. It is passed to the target ability as a parameter. |
Get familiar with the following about implicit Want: Get familiar with the following about implicit Want:
- The **want** parameter passed by the caller indicates the operation to be performed by the caller. It also provides data and application type restrictions. - The **want** parameter passed by the caller indicates the operation to be performed by the caller. It also provides data and application type restrictions.
- The **skills** field declares the capabilities of the target ability. For details, see [the skills tag](../quick-start/module-configuration-file.md#skills-tag) in the [module.json5 file](../quick-start/module-configuration-file.md). - The **skills** field declares the capabilities of the target ability. For details, see [the skills tag](../quick-start/module-configuration-file.md#skills) in the [module.json5 file](../quick-start/module-configuration-file.md).
The system matches the **want** parameter (including the **action**, **entities**, **uri**, and **type** attributes) passed by the caller against the **skills** configuration (including the **actions**, **entities**, **uris**, and **type** attributes) of the abilities one by one. When all the four attributes are matched, a dialog box is displayed for users to select a matched application. The system matches the **want** parameter (including the **action**, **entities**, **uri**, and **type** attributes) passed by the caller against the **skills** configuration (including the **actions**, **entities**, **uris**, and **type** attributes) of the abilities one by one. When all the four attributes are matched, a dialog box is displayed for users to select a matched application.
...@@ -60,8 +60,7 @@ The system matches the [action](../reference/apis/js-apis-ability-wantConstant.m ...@@ -60,8 +60,7 @@ The system matches the [action](../reference/apis/js-apis-ability-wantConstant.m
- If **action** in the passed **want** parameter is specified, and **actions** under **skills** of an ability is specified but does not contain **action** in the passed **want** parameter, the matching fails. - If **action** in the passed **want** parameter is specified, and **actions** under **skills** of an ability is specified but does not contain **action** in the passed **want** parameter, the matching fails.
Figure 1 Matching rules of action in the want parameter **Figure 1** Matching rules of action in the want parameter
<img src="figures/want-action.png" alt="want-action" style="zoom:80%;" /> <img src="figures/want-action.png" alt="want-action" style="zoom:80%;" />
...@@ -112,6 +111,7 @@ There are four combinations of **uri** and **type** settings. The matching rules ...@@ -112,6 +111,7 @@ There are four combinations of **uri** and **type** settings. The matching rules
To simplify the description, **uri** and **type** passed in the **want** parameter are called **w_uri** and **w_type**, respectively; the **uris** array under **skills** of an ability to match is called **s_uris**; each element in the array is called **s_uri**. Matching is performed from top to bottom. To simplify the description, **uri** and **type** passed in the **want** parameter are called **w_uri** and **w_type**, respectively; the **uris** array under **skills** of an ability to match is called **s_uris**; each element in the array is called **s_uri**. Matching is performed from top to bottom.
Figure 4 Matching rules of uri and type in the want parameter Figure 4 Matching rules of uri and type in the want parameter
<img src="figures/want-uri-type2.png" alt="want-uri-type2" style="zoom:80%;" /> <img src="figures/want-uri-type2.png" alt="want-uri-type2" style="zoom:80%;" />
...@@ -158,5 +158,3 @@ To simplify the description, **uri** in the passed **want** parameter is called ...@@ -158,5 +158,3 @@ To simplify the description, **uri** in the passed **want** parameter is called
- If the last character of **s_type** is the wildcard `*`, for example, `prefixType/*`, the matching is successful only when **w_type** contains `prefixType/`. - If the last character of **s_type** is the wildcard `*`, for example, `prefixType/*`, the matching is successful only when **w_type** contains `prefixType/`.
- If the last character of **w_type** is the wildcard `*`, for example, `prefixType/*`, the matching is successful only when **s_type** contains `prefixType/`. - If the last character of **w_type** is the wildcard `*`, for example, `prefixType/*`, the matching is successful only when **s_type** contains `prefixType/`.
<!--no_check-->
\ No newline at end of file
...@@ -345,21 +345,19 @@ The following describes how to implement multi-device collaboration through cros ...@@ -345,21 +345,19 @@ The following describes how to implement multi-device collaboration through cros
3. Create the callee ability. 3. Create the callee ability.
For the callee ability, implement the callback to receive data and the methods to marshal and unmarshal data. When data needs to be received, use **on()** to register a listener. When data does not need to be received, use **off()** to deregister the listener.
For the callee ability, implement the callback to receive data and the methods to marshal and unmarshal data. When data needs to be received, use **on()** to register a listener. When data does not need to be received, use **off()** to deregister the listener.
1. Configure the launch type of the UIAbility. 1. Configure the launch type of the UIAbility.
Set **launchType** of the callee ability to **singleton** in the **module.json5** file. Set **launchType** of the callee ability to **singleton** in the **module.json5** file.
| JSON Field| Description|
| -------- | -------- |
| "launchType"| Ability launch type. Set this parameter to **singleton**.|
An example of the UIAbility configuration is as follows:
| JSON Field| Description|
| -------- | -------- |
| "launchType"| Ability launch type. Set this parameter to **singleton**.|
An example of the UIAbility configuration is as follows:
```json ```json
"abilities":[{ "abilities":[{
"name": ".CalleeAbility", "name": ".CalleeAbility",
...@@ -377,77 +375,75 @@ For the callee ability, implement the callback to receive data and the methods t ...@@ -377,77 +375,75 @@ For the callee ability, implement the callback to receive data and the methods t
```ts ```ts
import Ability from '@ohos.app.ability.UIAbility'; import Ability from '@ohos.app.ability.UIAbility';
``` ```
3. Define the agreed sequenceable data. 3. Define the agreed sequenceable data.
The data formats sent and received by the caller and callee abilities must be consistent. In the following example, the data formats are number and string.
The data formats sent and received by the caller and callee abilities must be consistent. In the following example, the data formats are number and string.
```ts ```ts
export default class MySequenceable { export default class MySequenceable {
num: number = 0; num: number = 0
str: string = ""; str: string = ""
constructor(num, string) { constructor(num, string) {
this.num = num; this.num = num
this.str = string; this.str = string
} }
marshalling(messageParcel) { marshalling(messageParcel) {
messageParcel.writeInt(this.num); messageParcel.writeInt(this.num)
messageParcel.writeString(this.str); messageParcel.writeString(this.str)
return true; return true
} }
unmarshalling(messageParcel) { unmarshalling(messageParcel) {
this.num = messageParcel.readInt(); this.num = messageParcel.readInt()
this.str = messageParcel.readString(); this.str = messageParcel.readString()
return true; return true
} }
} }
``` ```
4. Implement **Callee.on** and **Callee.off**. 4. Implement **Callee.on** and **Callee.off**.
In the following example, the **MSG_SEND_METHOD** listener is registered in **onCreate()** of the ability and deregistered in **onDestroy()**. After receiving sequenceable data, the application processes the data and returns the data result. You need to implement processing based on service requirements. In the following example, the **MSG_SEND_METHOD** listener is registered in **onCreate()** of the ability and deregistered in **onDestroy()**. After receiving sequenceable data, the application processes the data and returns the data result. You need to implement processing based on service requirements.
```ts ```ts
const TAG: string = '[CalleeAbility]'; const TAG: string = '[CalleeAbility]'
const MSG_SEND_METHOD: string = 'CallSendMsg'; const MSG_SEND_METHOD: string = 'CallSendMsg'
function sendMsgCallback(data) { function sendMsgCallback(data) {
console.info('CalleeSortFunc called'); console.info('CalleeSortFunc called')
// Obtain the sequenceable data sent by the caller ability. // Obtain the sequenceable data sent by the caller ability.
let receivedData = new MySequenceable(0, ''); let receivedData = new MySequenceable(0, '')
data.readSequenceable(receivedData); data.readSequenceable(receivedData)
console.info(`receiveData[${receivedData.num}, ${receivedData.str}]`); console.info(`receiveData[${receivedData.num}, ${receivedData.str}]`)
// Process the data. // Process the data.
// Return the sequenceable data result to the caller ability. // Return the sequenceable data result to the caller ability.
return new MySequenceable(receivedData.num + 1, `send ${receivedData.str} succeed`); return new MySequenceable(receivedData.num + 1, `send ${receivedData.str} succeed`)
} }
export default class CalleeAbility extends Ability { export default class CalleeAbility extends Ability {
onCreate(want, launchParam) { onCreate(want, launchParam) {
try { try {
this.callee.on(MSG_SEND_METHOD, sendMsgCallback); this.callee.on(MSG_SEND_METHOD, sendMsgCallback)
} catch (error) { } catch (error) {
console.info(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`); console.info(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`)
} }
} }
onDestroy() { onDestroy() {
try { try {
this.callee.off(MSG_SEND_METHOD); this.callee.off(MSG_SEND_METHOD)
} catch (error) { } catch (error) {
console.error(TAG, `${MSG_SEND_METHOD} unregister failed with error ${JSON.stringify(error)}`); console.error(TAG, `${MSG_SEND_METHOD} unregister failed with error ${JSON.stringify(error)}`)
} }
} }
} }
``` ```
4. Obtain the caller object and access the callee ability. 4. Obtain the caller object and access the callee ability.
1. Import the **UIAbility** module. 1. Import the **UIAbility** module.
...@@ -457,14 +453,13 @@ For the callee ability, implement the callback to receive data and the methods t ...@@ -457,14 +453,13 @@ For the callee ability, implement the callback to receive data and the methods t
2. Obtain the caller object. 2. Obtain the caller object.
The **context** attribute of the ability implements **startAbilityByCall** to obtain the caller object for communication. The following example uses **this.context** to obtain the **context** attribute of the ability, uses **startAbilityByCall** to start the callee ability, obtain the caller object, and register the **onRelease** listener of the caller ability. You need to implement processing based on service requirements.
The **context** attribute of the ability implements **startAbilityByCall** to obtain the caller object for communication. The following example uses **this.context** to obtain the **context** attribute of the ability, uses **startAbilityByCall** to start the callee ability, obtain the caller object, and register the **onRelease** listener of the caller ability. You need to implement processing based on service requirements.
```ts ```ts
async onButtonGetRemoteCaller() { async onButtonGetRemoteCaller() {
var caller = undefined; var caller = undefined
var context = this.context; var context = this.context
context.startAbilityByCall({ context.startAbilityByCall({
deviceId: getRemoteDeviceId(), deviceId: getRemoteDeviceId(),
...@@ -472,23 +467,22 @@ For the callee ability, implement the callback to receive data and the methods t ...@@ -472,23 +467,22 @@ For the callee ability, implement the callback to receive data and the methods t
abilityName: 'CalleeAbility' abilityName: 'CalleeAbility'
}).then((data) => { }).then((data) => {
if (data != null) { if (data != null) {
caller = data; caller = data
console.info('get remote caller success'); console.info('get remote caller success')
// Register the onRelease() listener of the caller ability. // Register the onRelease() listener of the caller ability.
caller.onRelease((msg) => { caller.onRelease((msg) => {
console.info(`remote caller onRelease is called ${msg}`); console.info(`remote caller onRelease is called ${msg}`)
}) })
console.info('remote caller register OnRelease succeed'); console.info('remote caller register OnRelease succeed')
} }
}).catch((error) => { }).catch((error) => {
console.error(`get remote caller failed with ${error}`); console.error(`get remote caller failed with ${error}`)
}) })
} }
``` ```
For details about how to implement **getRemoteDeviceId()**, see [Starting UIAbility and ServiceExtensionAbility Across Devices (No Data Returned)](#starting-uiability-and-serviceextensionability-across-devices-no-data-returned). For details about how to implement **getRemoteDeviceId()**, see [Starting UIAbility and ServiceExtensionAbility Across Devices (No Data Returned)](#starting-uiability-and-serviceextensionability-across-devices-no-data-returned).
```
5. Sends agreed sequenceable data to the callee ability. 5. Sends agreed sequenceable data to the callee ability.
1. The sequenceable data can be sent to the callee ability with or without a return value. The method and sequenceable data must be consistent with those of the callee ability. The following example describes how to send data to the callee ability. 1. The sequenceable data can be sent to the callee ability with or without a return value. The method and sequenceable data must be consistent with those of the callee ability. The following example describes how to send data to the callee ability.
......
...@@ -31,4 +31,3 @@ Every mission retains a snapshot of the UIAbility instance. After the UIAbility ...@@ -31,4 +31,3 @@ Every mission retains a snapshot of the UIAbility instance. After the UIAbility
> >
> The **specified** mode is supported in the stage model only. > The **specified** mode is supported in the stage model only.
<!--no_check-->
\ No newline at end of file
...@@ -14,4 +14,3 @@ Similar to a PageAbility, a ServiceAbility is configured in **abilities** under ...@@ -14,4 +14,3 @@ Similar to a PageAbility, a ServiceAbility is configured in **abilities** under
For details about the configuration items, see [Internal Structure of module](../quick-start/module-structure.md). For details about the configuration items, see [Internal Structure of module](../quick-start/module-structure.md).
<!--no_check-->
\ No newline at end of file
...@@ -293,4 +293,3 @@ The ServiceExtensionAbility component returns an IRemoteObject in the **onConnec ...@@ -293,4 +293,3 @@ The ServiceExtensionAbility component returns an IRemoteObject in the **onConnec
}) })
``` ```
<!--no_check-->
\ No newline at end of file
...@@ -17,7 +17,7 @@ The following figure shows the basic concepts used in the stage model. ...@@ -17,7 +17,7 @@ The following figure shows the basic concepts used in the stage model.
- ExtensionAbility is oriented to specific scenarios. You cannot derive directly from ExtensionAbility. Instead, use the derived classes of ExtensionAbility for your scenarios, such as FormExtensionAbility for widget scenarios, InputMethodExtensionAbility for input method scenarios, and WorkSchedulerExtensionAbility for Work Scheduled task scenarios. For example, to enable a user to create an application widget on the home screen, you must derive FormExtensionAbility, implement the callback functions, and configure the capability in the configuration file. The derived class instances are created by developers and their lifecycles are managed by the system. In the stage model, you must use the derived classes of ExtensionAbility to develop custom services based on your service scenarios. - ExtensionAbility is oriented to specific scenarios. You cannot derive directly from ExtensionAbility. Instead, use the derived classes of ExtensionAbility for your scenarios, such as FormExtensionAbility for widget scenarios, InputMethodExtensionAbility for input method scenarios, and WorkSchedulerExtensionAbility for Work Scheduled task scenarios. For example, to enable a user to create an application widget on the home screen, you must derive FormExtensionAbility, implement the callback functions, and configure the capability in the configuration file. The derived class instances are created by developers and their lifecycles are managed by the system. In the stage model, you must use the derived classes of ExtensionAbility to develop custom services based on your service scenarios.
- [WindowStage](../windowmanager/application-window-stage.md) - [WindowStage](../windowmanager/application-window-stage.md)
Each UIAbility class instance is bound to a WindowStage class instance, which functions as the window manager in the application process. The WindowStage class instance contains a main window. That is, UIAbility holds a window through WindowStage, and this window provides an area for ArkUI to render. Each UIAbility class instance is bound to a WindowStage class instance, which functions as the window manager in the application process. The WindowStage class instance contains a main window. That is, UIAbility holds a main window through WindowStage, and this window provides an area for ArkUI to render.
- [Context](application-context-stage.md) - [Context](application-context-stage.md)
...@@ -32,12 +32,12 @@ The following figure shows the basic concepts used in the stage model. ...@@ -32,12 +32,12 @@ The following figure shows the basic concepts used in the stage model.
During application development based on the stage model, the following tasks are involved in the application model. During application development based on the stage model, the following tasks are involved in the application model.
**Table 1** Stage model development process **Table 1** Stage model development process
| Task| Introduction| Guide| | Task| Introduction| Guide|
| -------- | -------- | -------- | | -------- | -------- | -------- |
| Application component development| Use the UIAbility and ExtensionAbility components of the stage model to develop applications.| - [Application- or Component-Level Configuration](application-component-configuration-stage.md)<br>- [UIAbility Component](uiability-overview.md)<br>- [ExtensionAbility Component](extensionability-overview.md)<br>- [AbilityStage Container Component](abilitystage.md)<br>- [Context](application-context-stage.md)<br>- [Component Startup Rules](component-startup-rules.md) | | Application component development| Use the UIAbility and ExtensionAbility components of the stage model to develop applications.| - [Application- or Component-Level Configuration](application-component-configuration-stage.md)<br>- [UIAbility Component](uiability-overview.md)<br>- [ExtensionAbility Component](extensionability-overview.md)<br>- [AbilityStage Container Component](abilitystage.md)<br>- [Context](application-context-stage.md)<br>- [Component Startup Rules](component-startup-rules.md)|
| Inter-process communication (IPC)| Learn the process model and common IPC modes of the stage model.| - [Common Events](common-event-overview.md)<br>- [Background Services](background-services.md)| | Inter-process communication (IPC)| Learn the process model and common IPC modes of the stage model.| - [Common Events](common-event-overview.md)<br>- [Background Services](background-services.md)|
| Inter-thread communication| Learn the thread model and common inter-thread communication modes of the stage model.| - [Emitter](itc-with-emitter.md)<br>- [Worker](itc-with-worker.md)| | Inter-thread communication| Learn the thread model and common inter-thread communication modes of the stage model.| - [Emitter](itc-with-emitter.md)<br>- [Worker](itc-with-worker.md)|
| Mission management| Learn the basic concepts and typical scenarios of mission management in the stage model.| - [Mission Management Scenarios](mission-management-overview.md)<br>- [Mission Management and Launch Type](mission-management-launch-type.md)<br>- [Page Stack and MissionList](page-mission-stack.md) | | Mission management| Learn the basic concepts and typical scenarios of mission management in the stage model.| - [Mission Management Scenarios](mission-management-overview.md)<br>- [Mission Management and Launch Type](mission-management-launch-type.md)<br>- [Page Stack and Mission List](page-mission-stack.md)|
| Application configuration file| Learn the requirements for developing application configuration files in the stage model.| [Application Configuration File](config-file-stage.md) | | Application configuration file| Learn the requirements for developing application configuration files in the stage model.| [Application Configuration File](config-file-stage.md)|
...@@ -22,7 +22,7 @@ import featureAbility from '@ohos.ability.featureAbility' ...@@ -22,7 +22,7 @@ import featureAbility from '@ohos.ability.featureAbility'
want: { want: {
bundleName: "com.example.myapplication", bundleName: "com.example.myapplication",
moduleName: "entry", moduleName: "entry",
abilityName: "com.example.myapplication.MainAbility" abilityName: "com.example.myapplication.EntryAbility"
} }
} }
await featureAbility.startAbility(param) await featureAbility.startAbility(param)
......
...@@ -12,7 +12,7 @@ import featureAbility from '@ohos.ability.featureAbility'; ...@@ -12,7 +12,7 @@ import featureAbility from '@ohos.ability.featureAbility';
async function restartAbility() { async function restartAbility() {
let wantInfo = { let wantInfo = {
bundleName: "com.sample.MyApplication", bundleName: "com.sample.MyApplication",
abilityName: "MainAbility", abilityName: "EntryAbility",
parameters: { parameters: {
page: "pages/second" page: "pages/second"
} }
...@@ -89,7 +89,7 @@ struct Index { ...@@ -89,7 +89,7 @@ struct Index {
featureAbility.startAbility({ featureAbility.startAbility({
want: { want: {
bundleName: "com.exm.myapplication", bundleName: "com.exm.myapplication",
abilityName: "com.exm.myapplication.MainAbility", abilityName: "com.exm.myapplication.EntryAbility",
parameters: { page: "pages/page1" } parameters: { page: "pages/page1" }
} }
}).then((data) => { }).then((data) => {
...@@ -104,7 +104,7 @@ struct Index { ...@@ -104,7 +104,7 @@ struct Index {
featureAbility.startAbility({ featureAbility.startAbility({
want: { want: {
bundleName: "com.exm.myapplication", bundleName: "com.exm.myapplication",
abilityName: "com.exm.myapplication.MainAbility", abilityName: "com.exm.myapplication.EntryAbility",
parameters: { page: "pages/page2" } parameters: { page: "pages/page2" }
} }
}).then((data) => { }).then((data) => {
......
...@@ -9,23 +9,23 @@ This topic describes how the two application components of the stage model start ...@@ -9,23 +9,23 @@ This topic describes how the two application components of the stage model start
A UIAbility starts a PageAbility in the same way as it starts another UIAbility. A UIAbility starts a PageAbility in the same way as it starts another UIAbility.
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility' import UIAbility from '@ohos.app.ability.UIAbility';
export default class MainAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want, launchParam) {
console.info("MainAbility onCreate") console.info("EntryAbility onCreate")
} }
onDestroy() { onDestroy() {
console.info("MainAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage) {
console.info("MainAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
// ... // ...
}); });
let want = { let want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "MainAbility", abilityName: "EntryAbility",
}; };
this.context.startAbility(want).then(() => { this.context.startAbility(want).then(() => {
console.info('Start Ability successfully.'); console.info('Start Ability successfully.');
...@@ -34,13 +34,13 @@ export default class MainAbility extends UIAbility { ...@@ -34,13 +34,13 @@ export default class MainAbility extends UIAbility {
}); });
} }
onWindowStageDestroy() { onWindowStageDestroy() {
console.info("MainAbility onWindowStageDestroy") console.info("EntryAbility onWindowStageDestroy")
} }
onForeground() { onForeground() {
console.info("MainAbility onForeground") console.info("EntryAbility onForeground")
} }
onBackground() { onBackground() {
console.info("MainAbility onBackground") console.info("EntryAbility onBackground")
} }
} }
``` ```
...@@ -54,23 +54,23 @@ A UIAbility starts a PageAbility through **startAbilityForResult()** in the same ...@@ -54,23 +54,23 @@ A UIAbility starts a PageAbility through **startAbilityForResult()** in the same
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility' import UIAbility from '@ohos.app.ability.UIAbility';
export default class MainAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want, launchParam) {
console.info("MainAbility onCreate") console.info("EntryAbility onCreate")
} }
onDestroy() { onDestroy() {
console.info("MainAbility onDestroy") console.info("EntryAbility onDestroy")
} }
onWindowStageCreate(windowStage) { onWindowStageCreate(windowStage) {
console.info("MainAbility onWindowStageCreate") console.info("EntryAbility onWindowStageCreate")
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
// ... // ...
}); });
let want = { let want = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "MainAbility", abilityName: "EntryAbility",
}; };
this.context.startAbilityForResult(want).then((result) => { this.context.startAbilityForResult(want).then((result) => {
console.info('Ability verify result: ' + JSON.stringify(result)); console.info('Ability verify result: ' + JSON.stringify(result));
...@@ -79,13 +79,13 @@ export default class MainAbility extends UIAbility { ...@@ -79,13 +79,13 @@ export default class MainAbility extends UIAbility {
}); });
} }
onWindowStageDestroy() { onWindowStageDestroy() {
console.info("MainAbility onWindowStageDestroy") console.info("EntryAbility onWindowStageDestroy")
} }
onForeground() { onForeground() {
console.info("MainAbility onForeground") console.info("EntryAbility onForeground")
} }
onBackground() { onBackground() {
console.info("MainAbility onBackground") console.info("EntryAbility onBackground")
} }
} }
``` ```
...@@ -110,7 +110,7 @@ export default class ServiceExtension extends Extension { ...@@ -110,7 +110,7 @@ export default class ServiceExtension extends Extension {
console.info("ServiceExtension onRequest") console.info("ServiceExtension onRequest")
let wantFA = { let wantFA = {
bundleName: "com.ohos.fa", bundleName: "com.ohos.fa",
abilityName: "MainAbility", abilityName: "EntryAbility",
}; };
this.context.startAbility(wantFA).then(() => { this.context.startAbility(wantFA).then(() => {
console.info('Start Ability successfully.'); console.info('Start Ability successfully.');
......
...@@ -97,13 +97,13 @@ function getRemoteDeviceId() { ...@@ -97,13 +97,13 @@ function getRemoteDeviceId() {
if (typeof dmClass === 'object' && dmClass != null) { if (typeof dmClass === 'object' && dmClass != null) {
let list = dmClass.getTrustedDeviceListSync(); let list = dmClass.getTrustedDeviceListSync();
if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') { if (typeof (list) == 'undefined' || typeof (list.length) == 'undefined') {
console.info("MainAbility onButtonClick getRemoteDeviceId err: list is null"); console.info("EntryAbility onButtonClick getRemoteDeviceId err: list is null");
return; return;
} }
console.info("MainAbility onButtonClick getRemoteDeviceId success:" + list[0].deviceId); console.info("EntryAbility onButtonClick getRemoteDeviceId success:" + list[0].deviceId);
return list[0].deviceId; return list[0].deviceId;
} else { } else {
console.info("MainAbility onButtonClick getRemoteDeviceId err: dmClass is null"); console.info("EntryAbility onButtonClick getRemoteDeviceId err: dmClass is null");
} }
} }
``` ```
......
...@@ -14,7 +14,7 @@ import featureAbility from '@ohos.ability.featureAbility'; ...@@ -14,7 +14,7 @@ import featureAbility from '@ohos.ability.featureAbility';
let parameter = { let parameter = {
"want": { "want": {
bundleName: "com.ohos.stage", bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.MainAbility" abilityName: "com.ohos.stage.EntryAbility"
} }
}; };
featureAbility.startAbility(parameter).then((code) => { featureAbility.startAbility(parameter).then((code) => {
...@@ -38,7 +38,7 @@ import featureAbility from '@ohos.ability.featureAbility'; ...@@ -38,7 +38,7 @@ import featureAbility from '@ohos.ability.featureAbility';
let parameter = { let parameter = {
"want": { "want": {
bundleName: "com.ohos.stage", bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.MainAbility" abilityName: "com.ohos.stage.EntryAbility"
} }
}; };
featureAbility.startAbilityForResult(parameter).then((result) => { featureAbility.startAbilityForResult(parameter).then((result) => {
...@@ -60,7 +60,7 @@ import particleAbility from '@ohos.ability.particleAbility'; ...@@ -60,7 +60,7 @@ import particleAbility from '@ohos.ability.particleAbility';
let parameter = { let parameter = {
"want": { "want": {
bundleName: "com.ohos.stage", bundleName: "com.ohos.stage",
abilityName: "com.ohos.stage.MainAbility" abilityName: "com.ohos.stage.EntryAbility"
} }
}; };
particleAbility.startAbility(parameter).then(() => { particleAbility.startAbility(parameter).then(() => {
......
# Interaction Intra-Device Between UIAbility Components # Intra-Device Interaction Between UIAbility Components
UIAbility is the minimum unit that can be scheduled by the system. Jumping between functional modules in a device involves starting of specific UIAbility components, which belong to the same or a different application (for example, starting UIAbility of a third-party payment application). UIAbility is the minimum unit that can be scheduled by the system. Jumping between functional modules in a device involves starting of specific UIAbility components, which belong to the same or a different application (for example, starting UIAbility of a third-party payment application).
...@@ -50,7 +50,7 @@ Assume that your application has two UIAbility components: EntryAbility and Func ...@@ -50,7 +50,7 @@ Assume that your application has two UIAbility components: EntryAbility and Func
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class FuncAbility extends UIAbility { export default class FuncAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want, launchParam) {
...@@ -196,6 +196,7 @@ This section describes how to start the UIAbility of another application through ...@@ -196,6 +196,7 @@ This section describes how to start the UIAbility of another application through
``` ```
The following figure shows the effect. When you click **Open PDF**, a dialog box is displayed for you to select. The following figure shows the effect. When you click **Open PDF**, a dialog box is displayed for you to select.
<img src="figures/uiability-intra-device-interaction.png" alt="uiability-intra-device-interaction" style="zoom:50%;" /> <img src="figures/uiability-intra-device-interaction.png" alt="uiability-intra-device-interaction" style="zoom:50%;" />
3. To stop the **UIAbility** instance after the document application is used, call **terminateSelf()**. 3. To stop the **UIAbility** instance after the document application is used, call **terminateSelf()**.
...@@ -442,7 +443,8 @@ Ability call is usually used in the following scenarios: ...@@ -442,7 +443,8 @@ Ability call is usually used in the following scenarios:
The following figure shows the ability call process. The following figure shows the ability call process.
Figure 1 Ability call process **Figure 1** Ability call process
<img src="figures/call.png" alt="call" style="zoom:67%;" /> <img src="figures/call.png" alt="call" style="zoom:67%;" />
- The caller ability uses **startAbilityByCall** to obtain a caller object and uses **call()** of the caller object to send data to the callee ability. - The caller ability uses **startAbilityByCall** to obtain a caller object and uses **call()** of the caller object to send data to the callee ability.
...@@ -461,7 +463,7 @@ Figure 1 Ability call process ...@@ -461,7 +463,7 @@ Figure 1 Ability call process
The following table describes the main APIs used for the ability call. For details, see [AbilityContext](../reference/apis/js-apis-app-ability-uiAbility.md#caller). The following table describes the main APIs used for the ability call. For details, see [AbilityContext](../reference/apis/js-apis-app-ability-uiAbility.md#caller).
**Table 2** Ability call APIs **Table 2** Ability call APIs
| API| Description| | API| Description|
| -------- | -------- | | -------- | -------- |
...@@ -486,8 +488,7 @@ For the callee ability, implement the callback to receive data and the methods t ...@@ -486,8 +488,7 @@ For the callee ability, implement the callback to receive data and the methods t
1. Configure the ability launch type. 1. Configure the ability launch type.
Set **launchType** of the callee ability to **singleton** in the **module.json5** file.
Set **launchType** of the callee ability to **singleton** in the **module.json5** file.
| JSON Field| Description| | JSON Field| Description|
| -------- | -------- | | -------- | -------- |
...@@ -595,9 +596,9 @@ An example of the ability configuration is as follows: ...@@ -595,9 +596,9 @@ An example of the ability configuration is as follows:
2. Obtain the caller interface. 2. Obtain the caller interface.
The **context** attribute of the ability implements **startAbilityByCall** to obtain the caller object for communication. The following example uses **this.context** to obtain the **context** attribute of the ability, uses **startAbilityByCall** to start the callee ability, obtain the caller object, and register the **onRelease** listener of the caller ability. You need to implement processing based on service requirements. The **context** attribute of the ability implements **startAbilityByCall** to obtain the caller object for communication. The following example uses **this.context** to obtain the **context** attribute of the ability, uses **startAbilityByCall** to start the callee ability, obtain the caller object, and register the **onRelease** listener of the caller ability. You need to implement processing based on service requirements.
```ts ```ts
// Register the onRelease() listener of the caller ability. // Register the onRelease() listener of the caller ability.
private regOnRelease(caller) { private regOnRelease(caller) {
......
...@@ -18,6 +18,7 @@ The launch type of the UIAbility component refers to the state of the UIAbility ...@@ -18,6 +18,7 @@ The launch type of the UIAbility component refers to the state of the UIAbility
Each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, if a UIAbility instance of this type already exists in the application process, the instance is reused. Therefore, only one UIAbility instance of this type exists in the system, that is, displayed in **Recents**. Each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, if a UIAbility instance of this type already exists in the application process, the instance is reused. Therefore, only one UIAbility instance of this type exists in the system, that is, displayed in **Recents**.
**Figure 1** Demonstration effect in singleton mode **Figure 1** Demonstration effect in singleton mode
<img src="figures/uiability-launch-type1.png" alt="uiability-launch-type1" width="40%;" /> <img src="figures/uiability-launch-type1.png" alt="uiability-launch-type1" width="40%;" />
> **NOTE** > **NOTE**
...@@ -47,6 +48,7 @@ To use the singleton mode, set **launchType** in the [module.json5 configuration ...@@ -47,6 +48,7 @@ To use the singleton mode, set **launchType** in the [module.json5 configuration
In standard mode, each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, a new UIAbility instance of this type is created in the application process. Multiple UIAbility instances of this type are displayed in **Recents**. In standard mode, each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, a new UIAbility instance of this type is created in the application process. Multiple UIAbility instances of this type are displayed in **Recents**.
**Figure 2** Demonstration effect in standard mode **Figure 2** Demonstration effect in standard mode
<img src="figures/standard-mode.png" alt="standard-mode" width="40%;" /> <img src="figures/standard-mode.png" alt="standard-mode" width="40%;" />
To use the standard mode, set **launchType** in the [module.json5 configuration file](../quick-start/module-configuration-file.md) to **standard**. To use the standard mode, set **launchType** in the [module.json5 configuration file](../quick-start/module-configuration-file.md) to **standard**.
...@@ -72,6 +74,7 @@ To use the standard mode, set **launchType** in the [module.json5 configuration ...@@ -72,6 +74,7 @@ To use the standard mode, set **launchType** in the [module.json5 configuration
The **specified** mode is used in some special scenarios. For example, in a document application, you want a document instance to be created each time you create a document, but you want to use the same document instance when you repeatedly open an existing document. The **specified** mode is used in some special scenarios. For example, in a document application, you want a document instance to be created each time you create a document, but you want to use the same document instance when you repeatedly open an existing document.
**Figure 3** Demonstration effect in specified mode **Figure 3** Demonstration effect in specified mode
<img src="figures/uiability-launch-type2.png" alt="uiability-launch-type2" style="zoom:50%;" /> <img src="figures/uiability-launch-type2.png" alt="uiability-launch-type2" style="zoom:50%;" />
For example, there are EntryAbility and SpecifiedAbility, and the launch type of SpecifiedAbility is set to **specified**. You are required to start SpecifiedAbility from EntryAbility. For example, there are EntryAbility and SpecifiedAbility, and the launch type of SpecifiedAbility is set to **specified**. You are required to start SpecifiedAbility from EntryAbility.
...@@ -93,7 +96,7 @@ For example, there are EntryAbility and SpecifiedAbility, and the launch type of ...@@ -93,7 +96,7 @@ For example, there are EntryAbility and SpecifiedAbility, and the launch type of
``` ```
2. Before a UIAbility instance is created, you can create a unique string key for the instance. The key is bound to the UIAbility instance when it is created. Each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, the application is asked which UIAbility instance is used to respond to the [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) request. 2. Before a UIAbility instance is created, you can create a unique string key for the instance. The key is bound to the UIAbility instance when it is created. Each time [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) is called, the application is asked which UIAbility instance is used to respond to the [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) request.
In EntryAbility, add a custom parameter, for example, **instanceKey**, to the **want** parameter in [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) to distinguish the UIAbility instances. In EntryAbility, add a custom parameter, for example, **instanceKey**, to the [want](want-overview.md) parameter in [startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability) to distinguish the UIAbility instances.
```ts ```ts
// Configure an independent key for each UIAbility instance. // Configure an independent key for each UIAbility instance.
...@@ -146,7 +149,8 @@ For example, there are EntryAbility and SpecifiedAbility, and the launch type of ...@@ -146,7 +149,8 @@ For example, there are EntryAbility and SpecifiedAbility, and the launch type of
For example, in the document application, different key values are bound to different document instances. Each time a document is created, a new key value (for example, file path) is passed, and a new UIAbility instance is created when UIAbility is started in AbilityStage. However, when you open an existing document, the same UIAbility instance is started again in AbilityStage. For example, in the document application, different key values are bound to different document instances. Each time a document is created, a new key value (for example, file path) is passed, and a new UIAbility instance is created when UIAbility is started in AbilityStage. However, when you open an existing document, the same UIAbility instance is started again in AbilityStage.
The following steps are used as an example.
The following steps are used as an example.
1. Open file A. A UIAbility instance, for example, UIAbility instance 1, is started. 1. Open file A. A UIAbility instance, for example, UIAbility instance 1, is started.
2. Close the process of file A in **Recents**. UIAbility instance 1 is destroyed. Return to the home screen and open file A again. A new UIAbility instance is started, for example, UIAbility instance 2. 2. Close the process of file A in **Recents**. UIAbility instance 1 is destroyed. Return to the home screen and open file A again. A new UIAbility instance is started, for example, UIAbility instance 2.
......
...@@ -7,7 +7,7 @@ When a user opens, switches, and returns to an application, the UIAbility instan ...@@ -7,7 +7,7 @@ When a user opens, switches, and returns to an application, the UIAbility instan
The lifecycle of UIAbility has four states: **Create**, **Foreground**, **Background**, and **Destroy**, as shown in the figure below. The lifecycle of UIAbility has four states: **Create**, **Foreground**, **Background**, and **Destroy**, as shown in the figure below.
**Figure 1** UIAbility lifecycle states **Figure 1** UIAbility lifecycle states
<img src="figures/Ability-Life-Cycle.png" alt="Ability-Life-Cycle" style="zoom:50%;" /> <img src="figures/Ability-Life-Cycle.png" alt="Ability-Life-Cycle" style="zoom:50%;" />
...@@ -21,7 +21,7 @@ The **Create** state is triggered when the UIAbility instance is created during ...@@ -21,7 +21,7 @@ The **Create** state is triggered when the UIAbility instance is created during
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) { onCreate(want, launchParam) {
...@@ -36,14 +36,14 @@ export default class EntryAbility extends UIAbility { ...@@ -36,14 +36,14 @@ export default class EntryAbility extends UIAbility {
After the UIAbility instance is created but before it enters the **Foreground** state, the system creates a WindowStage instance and triggers the **onWindowStageCreate()** callback. You can set UI loading and WindowStage event subscription in the callback. After the UIAbility instance is created but before it enters the **Foreground** state, the system creates a WindowStage instance and triggers the **onWindowStageCreate()** callback. You can set UI loading and WindowStage event subscription in the callback.
**Figure 2** WindowStageCreate and WindowStageDestory **Figure 2** WindowStageCreate and WindowStageDestory
<img src="figures/Ability-Life-Cycle-WindowStage.png" alt="Ability-Life-Cycle-WindowStage" style="zoom:50%;" /> <img src="figures/Ability-Life-Cycle-WindowStage.png" alt="Ability-Life-Cycle-WindowStage" style="zoom:50%;" />
In the **onWindowStageCreate()** callback, use [loadContent()](../reference/apis/js-apis-window.md#loadcontent9-2) to set the page to be loaded, and call [on('windowStageEvent')](../reference/apis/js-apis-window.md#onwindowstageevent9) to subscribe to [WindowStage events](../reference/apis/js-apis-window.md#windowstageeventtype9), for example, having or losing focus, or becoming visible or invisible. In the **onWindowStageCreate()** callback, use [loadContent()](../reference/apis/js-apis-window.md#loadcontent9-2) to set the page to be loaded, and call [on('windowStageEvent')](../reference/apis/js-apis-window.md#onwindowstageevent9) to subscribe to [WindowStage events](../reference/apis/js-apis-window.md#windowstageeventtype9), for example, having or losing focus, or becoming visible or invisible.
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
// ... // ...
...@@ -77,7 +77,7 @@ Before the UIAbility instance is destroyed, the **onWindowStageDestroy()** callb ...@@ -77,7 +77,7 @@ Before the UIAbility instance is destroyed, the **onWindowStageDestroy()** callb
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
// ... // ...
...@@ -135,7 +135,7 @@ The UIAbility instance is destroyed when **terminateSelf()** is called or the us ...@@ -135,7 +135,7 @@ The UIAbility instance is destroyed when **terminateSelf()** is called or the us
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
// ... // ...
......
...@@ -37,4 +37,3 @@ To enable an application to properly use a UIAbility component, declare the UIAb ...@@ -37,4 +37,3 @@ To enable an application to properly use a UIAbility component, declare the UIAb
> >
> For the ability composition, see [Adding an Ability to a Module](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/ohos-adding-ability-0000001218280664-V3). > For the ability composition, see [Adding an Ability to a Module](https://developer.harmonyos.com/en/docs/documentation/doc-guides-V3/ohos-adding-ability-0000001218280664-V3).
<!--no_check-->
\ No newline at end of file
...@@ -11,10 +11,10 @@ If no startup page is specified, a white screen occurs after the application is ...@@ -11,10 +11,10 @@ If no startup page is specified, a white screen occurs after the application is
```ts ```ts
import UIAbility from '@ohos.app.ability.UIAbility'; import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window'; import window from '@ohos.window';
export default class EntryAbility extends UIAbility { export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: Window.WindowStage) { onWindowStageCreate(windowStage: window.WindowStage) {
// Main window is created. Set a main page for this ability. // Main window is created. Set a main page for this ability.
windowStage.loadContent('pages/Index', (err, data) => { windowStage.loadContent('pages/Index', (err, data) => {
// ... // ...
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
``` ```
- **Implicit Want**: A type of Want with **abilityName** unspecified when starting the ability. - **Implicit Want**: A type of Want with **abilityName** unspecified when starting the ability.
Implicit Want can be used when the object used to process the request is unclear and the current application wants to use a capability (defined by the [skills tag](../quick-start/module-configuration-file.md#skills-tag)) provided by another application. For example, you can use implicit Want to describe a request for opening a link, since you do not care which application is used to open the link. The system matches all applications that support the request. Implicit Want can be used when the object used to process the request is unclear and the current application wants to use a capability (defined by the [skills tag](../quick-start/module-configuration-file.md#skills)) provided by another application. For example, you can use implicit Want to describe a request for opening a link, since you do not care which application is used to open the link. The system matches all applications that support the request.
```ts ```ts
...@@ -47,5 +47,3 @@ ...@@ -47,5 +47,3 @@
> - If the **want** parameter passed does not contain **abilityName** or **bundleName**, the ServiceExtensionAbility components of all applications cannot be started through implicit Want. > - If the **want** parameter passed does not contain **abilityName** or **bundleName**, the ServiceExtensionAbility components of all applications cannot be started through implicit Want.
> >
> - If the **want** parameter passed contains **bundleName**, the **startServiceExtensionAbility()** method can be used to implicitly start ServiceExtensionAbility. By default, ServiceExtensionAbility with the highest priority is returned. If all the matching ServiceExtensionAbility components have the same priority, the first ServiceExtensionAbility is returned. > - If the **want** parameter passed contains **bundleName**, the **startServiceExtensionAbility()** method can be used to implicitly start ServiceExtensionAbility. By default, ServiceExtensionAbility with the highest priority is returned. If all the matching ServiceExtensionAbility components have the same priority, the first ServiceExtensionAbility is returned.
<!--no_check-->
\ No newline at end of file
...@@ -232,7 +232,7 @@ The widget configuration file is named **config.json**. Find the **config.json** ...@@ -232,7 +232,7 @@ The widget configuration file is named **config.json**. Find the **config.json**
"type": "service", "type": "service",
"srcLanguage": "ets", "srcLanguage": "ets",
"formsEnabled": true, "formsEnabled": true,
"formConfigAbility": "ability://com.example.entry.MainAbility", "formConfigAbility": "ability://com.example.entry.EntryAbility",
"forms": [{ "forms": [{
"colorMode": "auto", "colorMode": "auto",
"defaultDimension": "2*2", "defaultDimension": "2*2",
...@@ -434,7 +434,7 @@ You can use the web-like paradigm (HML+CSS+JSON) to develop JS widget pages. Thi ...@@ -434,7 +434,7 @@ You can use the web-like paradigm (HML+CSS+JSON) to develop JS widget pages. Thi
"actions": { "actions": {
"routerEvent": { "routerEvent": {
"action": "router", "action": "router",
"abilityName": "com.example.entry.MainAbility", "abilityName": "com.example.entry.EntryAbility",
"params": { "params": {
"message": "add detail" "message": "add detail"
} }
...@@ -452,8 +452,8 @@ You can set router and message events for components on a widget. The router eve ...@@ -452,8 +452,8 @@ You can set router and message events for components on a widget. The router eve
2. Set the router event. 2. Set the router event.
- **action**: **router**, which indicates a router event. - **action**: **router**, which indicates a router event.
- **abilityName**: name of the ability to redirect to (PageAbility component in the FA model and UIAbility component in the stage model). For example, the default MainAbility name of the FA model created by DevEco Studio is com.example.entry.MainAbility. - **abilityName**: name of the ability to redirect to (PageAbility component in the FA model and UIAbility component in the stage model). For example, the default UIAbility name created by DevEco Studio in the FA model is com.example.entry.EntryAbility.
- **params**: custom parameters passed to the target ability. Set them as required. The value can be obtained from **parameters** in **want** used for starting the target ability. For example, in the lifecycle function **onCreate** of the main ability in the FA model, **featureAbility.getWant()** can be used to obtain **want** and its **parameters** field. - **params**: custom parameters passed to the target ability. Set them as required. The value can be obtained from **parameters** in **want** used for starting the target ability. For example, in the lifecycle function **onCreate** of the EntryAbility in the FA model, **featureAbility.getWant()** can be used to obtain **want** and its **parameters** field.
3. Set the message event. 3. Set the message event.
- **action**: **message**, which indicates a message event. - **action**: **message**, which indicates a message event.
...@@ -529,7 +529,7 @@ The following is an example: ...@@ -529,7 +529,7 @@ The following is an example:
"actions": { "actions": {
"routerEvent": { "routerEvent": {
"action": "router", "action": "router",
"abilityName": "com.example.entry.MainAbility", "abilityName": "com.example.entry.EntryAbility",
"params": { "params": {
"message": "add detail" "message": "add detail"
} }
......
...@@ -597,4 +597,3 @@ The following is an example: ...@@ -597,4 +597,3 @@ The following is an example:
}; };
``` ```
<!--no_check-->
\ No newline at end of file
...@@ -81,7 +81,7 @@ bm uninstall [-h help] [-n bundleName] [-m moduleName] [-u userId] [-k] ...@@ -81,7 +81,7 @@ bm uninstall [-h help] [-n bundleName] [-m moduleName] [-u userId] [-k]
Example Example
```bash ```bash
bm uninstall -n com.ohos.app -m com.ohos.app.MainAbility -u 100 -k bm uninstall -n com.ohos.app -m com.ohos.app.EntryAbility -u 100 -k
// The execution result is as follows: // The execution result is as follows:
uninstall bundle successfully. uninstall bundle successfully.
``` ```
...@@ -178,7 +178,7 @@ Example ...@@ -178,7 +178,7 @@ Example
```bash ```bash
# Enable a bundle. # Enable a bundle.
bm enable -n com.ohos.app -a com.ohos.app.MainAbility -u 100 bm enable -n com.ohos.app -a com.ohos.app.EntryAbility -u 100
// The execution result is as follows: // The execution result is as follows:
enable bundle successfully. enable bundle successfully.
``` ```
...@@ -206,7 +206,7 @@ Example ...@@ -206,7 +206,7 @@ Example
```bash ```bash
# Disable a bundle. # Disable a bundle.
bm disable -n com.ohos.app -a com.ohos.app.MainAbility -u 100 bm disable -n com.ohos.app -a com.ohos.app.EntryAbility -u 100
// The execution result is as follows: // The execution result is as follows:
disable bundle successfully. disable bundle successfully.
``` ```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册