当前位置: 首页 > news >正文

鸿蒙通过Want传递参数

技术都是相互借鉴的,鸿蒙的Want类似于Android的Intent,本文将介绍Ability(Android是Activity,Ios是ViewController)直接的跳转通过Want来传递参数,一个Ability跳转到另外一个Ability,另外一个Ability操作完成后,关闭返回有时候不需要有返回值,有时候需要返回值。本文两种情况都实验了。本文模拟从AbilityTest.ets跳转到NewsAbility.ets。

AbilityTest.ets代码

import { common, Want } from '@kit.AbilityKit'
import { hilog } from '@kit.PerformanceAnalysisKit';
import { TAG } from '@ohos/hypium/src/main/Constant';
import { BusinessError } from '@kit.BasicServicesKit';@Entry
@Component
struct AbilityTest {private context = getContext(this) as common.UIAbilityContext;build() {Column(){Text("Ability跳转测试")Button("跳转到新闻Ability").onClick(()=>{// context为Ability对象的成员,在非Ability对象内部调用需要// 将Context对象传递过去let wantInfo: Want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.figo.testapplication',//app.json5里面查看moduleName: 'entry', // module.json5里面查看abilityName: 'NewsAbility',//需要跳转过去的abilityName,module.json5里面查看parameters: {//传递的参数// 自定义信息param1: '来自AbilityTest页面的param1',param2: 123},};//1.无需获取返回值startAbility// this.context.startAbility(wantInfo).then(() => {//   let DOMAIN_NUMBER=1000;//   hilog.info(DOMAIN_NUMBER, TAG, 'startAbility success.');// }).catch((error: BusinessError) => {//   let DOMAIN_NUMBER=9999//   hilog.error(DOMAIN_NUMBER, TAG, 'startAbility failed.');// });//2.需要获取下一个ability的返回值startAbilityForResultlet RESULT_CODE=100;//需要和传递的一致let DOMAIN_NUMBER=1000;this.context.startAbilityForResult(wantInfo).then((data) => {if (data?.resultCode === RESULT_CODE) {// 获取被调用ability,本demo是NewsAbility返回的参数let paramNew1 = data.want?.parameters?.paramNew1;let paramNew2 = data.want?.parameters?.paramNew2;hilog.info(0x0000, 'testTag', '接收到NewsAbility返回值为:paramNew1=%{public}s,paramNew2=%{public}d', paramNew1,paramNew2);}hilog.info(DOMAIN_NUMBER, TAG, JSON.stringify(data.resultCode) ?? '');}).catch((err: BusinessError) => {hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability for result. Code is ${err.code}, message is ${err.message}`);});})}}
}

NewsAbility.ets代码

获取AbilityTest.ets传来的参数

export default class NewsAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// 接收调用方UIAbility传过来的参数let funcAbilityWant = want;let param1 = funcAbilityWant?.parameters?.param1;let param2 = funcAbilityWant?.parameters?.param2;hilog.info(0x0000, 'testTag', '接收到参数param1=%{public}s,param2=%{public}d', param1,param2);}
}

返回值给AbilityTest.ets

import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { TAG } from '@ohos/hypium/src/main/Constant';@Entry
@Component
struct NewsPage {build() {Column(){Text("新闻列表页")Button("返回").onClick(()=>{let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; // UIAbilityContext// 1.无需返回值的情况 context为需要停止的UIAbility实例的AbilityContext// context.terminateSelf((err) => {//   if (err.code) {//     let DOMAIN_NUMBER = 9999;//     hilog.error(DOMAIN_NUMBER, TAG, `Failed to terminate self. Code is ${err.code}, message is ${err.message}`);//     return;//   }// })//2.需要返回值的情况const RESULT_CODE: number = 100;let abilityResult: common.AbilityResult = {resultCode: RESULT_CODE,want: {bundleName: 'com.figo.testapplication',moduleName: 'entry', // moduleName非必选abilityName: 'EntryAbility',parameters: {paramNew1: '来自AbilityTest页面',paramNew2: 1234567890},},};context.terminateSelfWithResult(abilityResult, (err) => {if (err.code) {let DOMAIN_NUMBER=1000;hilog.error(DOMAIN_NUMBER, TAG, `Failed to terminate self with result. Code is ${err.code}, message is ${err.message}`);return;}});})}}
}


http://www.mrgr.cn/news/4715.html

相关文章:

  • 【GH】【EXCEL】P6: Shapes
  • 格雷编码
  • 0成本学习Liunx系统【只需要一台笔记本电脑,无需购买云服务器】
  • 【论文笔记】LION: Linear Group RNN for 3D Object Detection in Point Clouds
  • 计算机基础知识复习8.22
  • 软考中级网络工程师0822
  • LLM之基于llama-index部署本地embedding与GLM-4模型并初步搭建RAG(其他大模型也可,附上ollma方式运行)
  • 【源码】Sharding-JDBC源码分析之ShardingSphereDataSource的创建原理
  • Linux系统管理体系-服务管理
  • 探索RAG与Multi-Agent的结合:解决复杂任务的新方法
  • ArcGIS Pro基础:设置2个窗口同步联动界面
  • NVM安装管理node.js版本(简单易懂)
  • Java之文件操作和IO
  • 【网络编程】使用函数汇总总结
  • PythonStudio 控件使用常用方式(三十四)TTaskBar
  • day35
  • 远程供水无障碍,管线车助力全面消防防护_鼎跃安全
  • http 请求-02-Ajax XHR 的替代方案 fetch api 入门介绍
  • 供应商管理系统如何提升管理效能?
  • 企业网中网关的部署位置浅析