> 文档中心 > 【OpenHarmony应用开发】【Stage模型】启动应用内的UIAbility并获取返回结果

【OpenHarmony应用开发】【Stage模型】启动应用内的UIAbility并获取返回结果

在EntryAbility启动EntryAbility2时,希望在被启动的EntryAbility2完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和帐号登录功能分别设计为两个独立的UIAbility,在帐号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。

【OpenHarmony应用开发】【Stage模型】启动应用内的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%')    }}