harmony 鸿蒙@ohos.app.ability.Want (Want)
@ohos.app.ability.Want (Want)
Want is a carrier for information transfer between objects (application components). Want can be used as a parameter of startAbility to specify a startup target and information that needs to be carried during startup, for example, bundleName and abilityName, which respectively indicate the bundle name of the target ability and the ability name in the bundle. When UIAbilityA needs to start UIAbilityB and transfer some data to UIAbilityB, it can use Want a carrier to transfer the data.
NOTE
The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version.
Modules to Import
import { Want } from '@kit.AbilityKit';
Properties
Atomic service API: This API can be used in atomic services since API version 11.
System capability: SystemCapability.Ability.AbilityBase
Name | Type | Mandatory | Description |
---|---|---|---|
deviceId | string | No | ID of the device running the ability. If this field is unspecified, the local device is used. |
bundleName | string | No | Bundle name of the ability. |
moduleName | string | No | Name of the module to which the ability belongs. NOTE If the ability belongs to a HAR module, moduleName must be set to the name of the HAP or HSP module that depends on this HAR. |
abilityName | string | No | Name of the ability. If both bundleName and abilityName are specified in a Want object, the Want object can match a specific ability. The value of abilityName must be unique in an application. |
action | string | No | Action to take, such as viewing and sharing application details. 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 details about the definition and matching rules of implicit Want, see Matching Rules of Explicit Want and Implicit Want. |
entities | Array<string> | No | Additional category information (such as browser and video player) of the ability. It is a supplement to the action field for implicit Want. and is used to filter ability types. |
uri | string | No | Data carried. This field is used together with type to specify the data type. If uri is specified in a Want, the Want will match the specified URI information, including scheme, schemeSpecificPart, authority, and path. |
type | string | No | MIME type, that is, the type of the file to open, for example, ‘text/xml’ and ‘image/*’. For details about the MIME type definition, see https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com. |
parameters | Record<string, Object> | No | List of parameters in the Want object. 1. The values of the following keys are assigned by the system. Manual settings do not take effect, since the system automatically changes the values to the actual values during data transfer. - ohos.aafwk.param.callerPid: PID of the caller. The value is a string. - ohos.aafwk.param.callerBundleName: bundle name of the caller. The value is a string. - ohos.aafwk.param.callerAbilityName: ability name of the caller. The value is a string. - ohos.aafwk.param.callerNativeName: process name of the caller when the native method is called. The value is a string. - ohos.aafwk.param.callerAppId: appId of the caller. The value is a string. - ohos.aafwk.param.callerAppIdentifier: appIdentifier of the caller. The value is a string. - ohos.aafwk.param.callerToken: token of the caller. The value is a string. - ohos.aafwk.param.callerUid: UID in BundleInfo, that is, the application’s UID in the bundle information. The value is a number. - ohos.param.callerAppCloneIndex: clone index of the caller. The value is of the numeric type. - component.startup.newRules: enabled status of the new control rule. The value is of the Boolean type. - moduleName: module name of the caller. The value is a string. - ability.params.backToOtherMissionStack: support for redirection back across mission stacks. The value is of the Boolean type. - ohos.ability.params.abilityRecoveryRestart: support for ability restart upon fault recovery. The value is of the Boolean type. - ohos.extra.param.key.contentTitle: title that can be shared by the atomic service. The value is a string. - ohos.extra.param.key.shareAbstract: content that can be shared by the atomic service. The value is a string. - ohos.extra.param.key.shareUrl: URL of the content that can be shared by the atomic service. The value is a string. - ohos.extra.param.key.supportContinuePageStack: support for migration of page stack information during cross-device migration. The value is of the Boolean type. The default value is true, indicating that page stack information is automatically migrated. - ohos.extra.param.key.supportContinueSourceExit: support for application exit on the source device during cross-device migration. The value is of the Boolean type. The default value is true, indicating that the application on the source device automatically exits. - ohos.extra.param.key.showMode: mode to show the atomic service startup. The value is an enumerated value of wantConstant.ShowMode. - ohos.dlp.params.sandbox: available only for DLP files. This key is involved only in system applications. - ohos.dlp.params.bundleName: bundle name of DLP. The value is a string. This key is involved only in system applications. - ohos.dlp.params.moduleName: module name of DLP. The value is a string. This key is involved only in system applications. - ohos.dlp.params.abilityName: ability name of DLP. The value is a string. This key is involved only in system applications. - ohos.dlp.params.index: DLP index. The value is a number. This key is involved only in system applications. - ohos.ability.params.asssertFaultSessionId: session ID of the fault assertion. The value is a string. This key is involved only in system applications. 2. The following keys are defined by the system, and their values need to be manually assigned. - ability.params.stream: File URIs to be authorized to the target ability. The value is a file URI array of the string type. - ohos.extra.param.key.appCloneIndex: index of the application clone. - ohos.params.appLaunchTrustList: filter list of applications for implicit launch. Only applications in the list are matched during implicit launch. The value is an array of AppIdentifiers of the string type. The filter list supports a maximum of 50 applications. Passing an empty array will have no effect. NOTE: This parameter is supported since API version 17. 3. In addition to the foregoing cases, applications may further agree on the key-value pairs to transfer. NOTE For details about the constants of Params in want, see wantConstant. Note that a maximum of 200 KB data that can be transferred by using WantParams. If the data volume exceeds 200 KB, transfer data in WriteRawDataBuffer or uri mode. The values of parameters must be of the following basic data types: String, Number, Boolean, Object, undefined, and null. Functions in an object cannot be transferred. |
flags | number | No | How the Want object will be handled. By default, a number is passed in. For example, wantConstant.Flags.FLAG_ABILITY_CONTINUATION specifies whether to start the ability in cross-device migration scenarios. |
fds15+ | Record<string, number> | No | Want file descriptor (FD), which is used to identify the Want file opened. You can obtain the FD from fs.open. When the FD is no longer needed, you must call fs.close to destroy the FD in a timely manner to prevent FD leakage. Atomic service API: This API can be used in atomic services since API version 15. |
Example
- Basic usage: called in a UIAbility object, as shown in the example below. For details about how to obtain the context, see Obtaining the Context of UIAbility.
import { UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: window.WindowStage): void {
let want: Want = {
deviceId: '', // An empty deviceId indicates the local device.
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
moduleName: 'entry' // moduleName is optional.
};
this.context.startAbility(want, (err: BusinessError) => {
if (err.code) {
// Start an ability explicitly. The bundleName, abilityName, and moduleName parameters work together to uniquely identify an ability.
console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
}
});
}
}
Currently, the following data types are supported: string, number, Boolean, object, array, and file descriptor (FD).
String
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { keyForString: 'str', }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
Number
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { keyForInt: 100, keyForDouble: 99.99, }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
Boolean
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { keyForBool: true, }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
Object
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { keyForObject: { keyForObjectString: 'str', keyForObjectInt: -200, keyForObjectDouble: 35.5, keyForObjectBool: false, }, }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
Array
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { keyForArrayString: ['str1', 'str2', 'str3'], keyForArrayInt: [100, 200, 300, 400], keyForArrayDouble: [0.1, 0.2], keyForArrayObject: [{ obj1: 'aaa' }, { obj2: 100 }], }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
FD
import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; import { fileIo } from '@kit.CoreFileKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let fd: number = 0; try { fd = fileIo.openSync('/data/storage/el2/base/haps/pic.png').fd; } catch(err) { let code = (err as BusinessError).code; let message = (err as BusinessError).message; console.error(`Failed to openSync. Code: ${code}, message: ${message}`); } let want: Want = { deviceId: '', // An empty deviceId indicates the local device. bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', moduleName: 'entry', // moduleName is optional. parameters: { 'keyFd': { 'type': 'FD', 'value': fd } // {'type':'FD', 'value':fd} is a fixed usage, indicating that the data is a file descriptor. } }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
parameters usage: parameters carries custom parameters. It is transferred by UIAbilityA to UIAbilityB and obtained from UIAbilityB.
// (1) UIAbilityA calls startAbility to start UIAbilityB. import { UIAbility, Want } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'UIAbilityB', parameters: { developerParameters: 'parameters', }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
// (2) If the UIAbilityB instance is started for the first time, it enters the onCreate lifecycle. import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit'; class UIAbilityB extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { console.log(`onCreate, want parameters: ${want.parameters?.developerParameters}`); } }
Usage of the keys of wantConstant in parameters.
import { UIAbility, Want, wantConstant } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { let want: Want = { bundleName: 'com.example.myapplication', abilityName: 'FuncAbility', parameters: { [wantConstant.Params.CONTENT_TITLE_KEY]: 'contentTitle', }, }; this.context.startAbility(want, (err: BusinessError) => { if (err.code) { console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`); } }); } }
Obtain the information about the party that starts the UIAbility from parameters.
For details, see Obtaining Information About the UIAbility Launcher.
你可能感兴趣的鸿蒙文章
harmony 鸿蒙AbilityAccessControl
harmony 鸿蒙OH_NativeBundle_ApplicationInfo
harmony 鸿蒙OH_NativeBundle_ElementName
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦