欢迎光临散文网 会员登陆 & 注册

应用间互相跳转并传递数据

2023-08-10 00:45 作者:起个名好难还被占用  | 我要投稿

参考链接:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/application-models/uiability-intra-device-interaction.md#%E5%90%AF%E5%8A%A8%E5%85%B6%E4%BB%96%E5%BA%94%E7%94%A8%E7%9A%84uiability

let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
let want = {
 deviceId: '', // deviceId为空表示本设备
 bundleName: 'com.example.projectb',
 moduleName: 'entry', // moduleName非必选
 abilityName: 'EntryAbility',
 parameters: { // 自定义信息
   numa: 1,
   numb: 2
 },
}
// context为调用方UIAbility的UIAbilityContext
context.startAbility(want).then(() => {
 console.info('Succeeded in starting ability.');
}).catch((err) => {
 console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
})

步骤:1. 构建want参数,要跳转对应应用的bundleName和moduleName

            2. 调用context.startAbility方法跳转到对应应用

ProjectA

// index.ets

import UIAbility from '@ohos.app.ability.UIAbility'
import common from '@ohos.app.ability.common';

@Entry
@Component
struct Index {
 @State message: string = 'ProjectA'
 @StorageLink('sum') sum: number = 0;

 build() {
   Row() {
     Column() {
       Text(this.message)
         .fontSize(50)
         .fontWeight(FontWeight.Bold)
       Button('跳转ProjectB')
         .onClick(() => {
           let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
           let want = {
             deviceId: '', // deviceId为空表示本设备
             bundleName: 'com.example.projectb',
             moduleName: 'entry', // moduleName非必选
             abilityName: 'EntryAbility',
             parameters: { // 自定义信息
               numa: 1,
               numb: 2
             },
           }
           // context为调用方UIAbility的UIAbilityContext
           context.startAbility(want).then(() => {
             console.info('Succeeded in starting ability.');
           }).catch((err) => {
             console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
           })
         })
       Text('从ProjectB拿到返回值' + this.sum)
     }
     .width('100%')
   }
   .height('100%')
 }
}

// EntryAbility.ts

onCreate(want, launchParam) {
 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
 console.log('onNewWant');
 let funcAbilityWant = want;
 let sum = funcAbilityWant?.parameters?.sum;

 AppStorage.SetOrCreate('sum', sum);
}

onNewWant(want) {
 console.log('onNewWant');
 let funcAbilityWant = want;
 let sum = funcAbilityWant?.parameters?.sum;

 AppStorage.SetOrCreate('sum', sum);
}

ProjectB

// index.ets

import common from '@ohos.app.ability.common'
@Entry
@Component
struct Index {
 @State message: string = 'projectB'

 build() {
   Row() {
     Column() {
       Text(this.message)
         .fontSize(50)
         .fontWeight(FontWeight.Bold)
       Button('跳转ProjectA')
         .onClick(() => {
           let context = getContext(this) as common.UIAbilityContext; // UIAbilityContext
           let want = {
             deviceId: '', // deviceId为空表示本设备
             bundleName: 'com.example.projecta',
             moduleName: 'entry', // moduleName非必选
             abilityName: 'EntryAbility',
             parameters: { // 自定义信息
               sum: AppStorage.Get('sum')
             },
           }
           // context为调用方UIAbility的UIAbilityContext
           context.startAbility(want).then(() => {
             console.info('Succeeded in starting ability.');
           }).catch((err) => {
             console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
           })
         })
     }
     .width('100%')
   }
   .height('100%')
 }
}

// EntryAbility.ts

onCreate(want, launchParam) {
 hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
 let funcAbilityWant = want;
 let numa = funcAbilityWant?.parameters?.numa;
 let numb = funcAbilityWant?.parameters?.numb;
 console.log('testTwoApp' + numa + numb);
 let sum = numa + numb;
 AppStorage.SetOrCreate('sum', sum);
}

onNewWant(want) {
 console.log('onNewWant');
 let funcAbilityWant = want;
 let numa = funcAbilityWant?.parameters?.numa;
 let numb = funcAbilityWant?.parameters?.numb;
 console.log('testTwoApp' + numa + numb);
 let sum = numa + numb;
 AppStorage.SetOrCreate('sum', sum);
}

参考视频:https://www.bilibili.com/video/BV1AV411V7yn/?vd_source=ca38750c3d4234b7d9d5f8fd31f855d1



应用间互相跳转并传递数据的评论 (共 条)

分享到微博请遵守国家法律