【OpenHarmony应用开发】【Stage模型】启动应用内的UIAbility并获取返回结果
在EntryAbility启动EntryAbility2时,希望在被启动的EntryAbility2完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和帐号登录功能分别设计为两个独立的UIAbility,在帐号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。
import UIAbility from '@ohos.app.ability.UIAbility';import hilog from '@ohos.hilog';import window from '@ohos.window';export default class EntryAbility extends UIAbility { onCreate(want, launchParam) { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); } onDestroy() { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } onWindowStageCreate(windowStage: window.WindowStage) { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index', (err, data) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); } onWindowStageDestroy() { // Main window is destroyed, release UI related resources hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); } onForeground() { // Ability has brought to foreground hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); } onBackground() { // Ability has back to background hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); }}
import common from '@ohos.app.ability.common'import hilog from '@ohos.hilog'@Entry@Componentstruct Index { @State message: string = 'Page' private context = getContext(this) as common.UIAbilityContext build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button("跳转到另一个UIAbility") .size({ width: 350, height: 60 }) .fontSize(30) .onClick(() => { let wantInfo = {// 待启动的UIAbility所在设备的Id// deviceId为空表示本设备deviceId: '',// 待启动的UIAbility所在应用的包名bundleName: 'com.example.ho31beta',// 待启动的UIAbility所在模块的名称moduleName: 'entry',// 待启动的UIAbility的名称abilityName: 'EntryAbility2',parameters: { // 自定义信息 info: '来自EntryAbility Index页面',}, } // this.context.startAbility(wantInfo) // 异步回调中的data用于接收EntryAbility2停止自身后返回给EntryAbility的信息 this.context.startAbilityForResult(wantInfo).then((data) => {if (data?.resultCode == 1001) { // 解析目标UIAbility返回的信息 let info = data.want?.parameters?.info hilog.info(0x0000, 'resultInfo', '%{public}s', info)} }) }) } .width('100%') } .height('100%') }}
import UIAbility from '@ohos.app.ability.UIAbility';import hilog from '@ohos.hilog';import window from '@ohos.window';export default class EntryAbility2 extends UIAbility { onCreate(want, launchParam) { // 接收源UIAbility传过来的参数 let info = want?.parameters?.info hilog.info(0x0000, 'ReceivedInfo', '%{public}s', info) hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); } onDestroy() { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } onWindowStageCreate(windowStage: window.WindowStage) { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index2', (err, data) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); } onWindowStageDestroy() { // Main window is destroyed, release UI related resources hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); } onForeground() { // Ability has brought to foreground hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); } onBackground() { // Ability has back to background hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); }}
import common from '@ohos.app.ability.common'@Entry@Componentstruct Index2 { @State message: string = 'Page2' private context = getContext(this) as common.UIAbilityContext build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Button("返回数据") .size({ width: 350, height: 60 }) .fontSize(30) .onClick(() => { let abilityResult = {resultCode: 1001,want: { parameters: { info: '来自EntryAbility2 Index2页面' }} } // 入参abilityResult为EntryAbility2需要返回给EntryAbility的信息 this.context.terminateSelfWithResult(abilityResult) }) } .width('100%') } .height('100%') }}