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

ArkUI-X通过Stage模型开发Android端应用指南(二)

StageApplication初始化支持以下三种方式

1. 通过继承StageApplication的方式进行初始化

import ohos.stage.ability.adapter.StageApplication;public class HiStageApplication extends StageApplication {@Overridepublic void onCreate() {super.onCreate();}
}

2. 继承Android原生Application方式,在onCreate方法中创建StageApplicationDelegate实例进行初始化

import android.app.Application;
import ohos.stage.ability.adapter.StageApplicationDelegate;public class HiStageApplication extends Application {private StageApplicationDelegate appDelegate_ = null;@Overridepublic void onCreate() {super.onCreate();appDelegate_ = new StageApplicationDelegate();appDelegate_.initApplication(this);}
}

3. 在Activity中创建StageApplicationDelegate实例进行初始化

import android.app.Activity;
import ohos.stage.ability.adapter.StageApplicationDelegate;public class EntryEntryAbilityActivity extends Activity {private StageApplicationDelegate appDelegate_ = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {appDelegate_ = new StageApplicationDelegate();appDelegate_.initApplication(this.getApplication());super.onCreate(savedInstanceState);}
}

通过原生Activity拉起Ability并传递参数

使用原生Activity拉起Ability时,需使用原生应用的startActivity方法,参数的传递需要通过Intent中的putExtra()进行设置,目前有两种方式进行参数的传递,具体如下:

1. 使用手动方式

参数格式

key值为params
value为json格式

{"params":[{"key":键,"type":参数类型值,"value":值},{...}]
}
示例代码
  • Java
public class EntryEntryAbilityActivity extends AppCompatActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent();intent.setClass(this, EntryEntryAbilityTwoActivity.class);intent.putExtra("params","{\"params\":[{\"key\":\"keyfirst\",\"type\":1,\"value\":\"keyvalue\"}," +"{\"key\":\"keysecond\",\"type\":9,\"value\":\"2.3\"}," +"{\"key\":\"keythird\",\"type\":5,\"value\":\"2\"}," +"{\"key\":\"keyfourth\",\"type\":10,\"value\":\"test\"}]}");startActivity(intent);}
}
  • ArkTS
# xxx.ets
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {console.log("value = " + want.parameters?.keyfirst)console.log("value = " + want.parameters?.keysecond)console.log("value = " + want.parameters?.keythird)console.log("value = " + want.parameters?.keyfourth)}onWindowStageCreate(windowStage: window.WindowStage): void {...}
...
}
支持的参数类型列表
参数类型参数类型值
boolean1
int5
double9
string10

2. WantParams工具类

推荐使用。

参数格式

putExtra中的key值为"params",对应的value为WantParams字符串。

    WantParams wantParams = new WantParams();wantParams.addValue("key1", "value").addValue("key2", 123).addValue("key3", false)...
示例代码
  • Java
    此示例展示了在启动一个新的 Ability 时,如何通过 WantParams 实现参数传递。具体涉及使用 WantParams 中的 addValue、getValue 和 toWantParamsString 接口,完成数据的自定义、获取和修改。
public class MainAbilityActivity extends StageActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = new Intent();intent.setClass(this, EntryEntryAbilityActivity.class);// 设置自定义数据WantParams wantParams = new WantParams();wantParams.addValue("stringKey", "normal").addValue("intKey", -2147483648).addValue("doubleKey", -6.9).addValue("boolKey", true).addValue("arrayKey", new boolean[] { false, true }).addValue("wantParamsKey",new WantParams().addValue("stringKey2", "It's me."));// 获取指定的键对应的值并修改Object obj = wantParams.getValue("stringKey");if (obj instanceof String) {wantParams.setValue("stringKey", "new string value");}obj = wantParams.getValue("intKey");if (obj instanceof Integer) {wantParams.setValue("intKey", 123);}obj = wantParams.getValue("arrayKey");if (obj instanceof boolean[]) {wantParams.setValue("arrayKey", new boolean[] { false, false });}obj = wantParams.getValue("wantParamsKey");if (obj instanceof WantParams) {wantParams.setValue("wantParamsKey", new WantParams().addValue("intKey", 999));}intent.putExtra("params", wantParams.toWantParamsString());startActivity(intent);}
}
  • ArkTS
# xxx.ets
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {console.log("value = " + want.parameters?.stringKey)console.log("value = " + want.parameters?.intKey)console.log("value = " + want.parameters?.doubleKey)console.log("value = " + want.parameters?.boolKey)console.log("value = " + JSON.stringify(want.parameters?.arrayKey))console.log("value = " + JSON.stringify(want.parameters?.wantParamsKey))}
}
支持的参数类型

WantParams支持的类型有:
boolean、int、float、double、String、WantParams、boolean[]、int[]、float[]、double[]、String[]。
WantParams提供的接口详细如下:

接口返回值参数功能
addValueWantParamsString key, boolean value为WantParams添加"String"类型的key,"boolean"类型的值value。
addValueWantParamsString key, int value为WantParams添加"String"类型的key,"int"类型的值value。
addValueWantParamsString key, double value为WantParams添加"String"类型的key,"double"类型的值value。
addValueWantParamsString key, String value为WantParams添加"String"类型的key,"String"类型的值value。
addValueWantParamsString key, boolean[] value为WantParams添加"String"类型的key,"boolean[]"类型的值value。
addValueWantParamsString key, int[] value为WantParams添加"String"类型的key,"int[]"类型的值value。
addValueWantParamsString key, double[] value为WantParams添加"String"类型的key,"double[]"类型的值value。
addValueWantParamsString key, String[] value为WantParams添加"String"类型的key,"String[]"类型的值value。
addValueWantParamsString key, WantParams value为WantParams添加"String"类型的key,"WantParams"类型的值value。
getValueObjectString key获取键值为key的属性值,如果键值不存在则返回null。
toWantParamsStringString-将WantParams对象转换为Json字符串。

注意事项

  • addValue和getValue中的key不能包含特殊字符;如\t、\r、\n等。
  • 在使用手动方式(非WantParams)自定义字符串时,key和value均不能包含特殊字符。
  • array和object不支持使用手动方式进行使用。
  • double的小数点后有效小数位为6位。

用启动Ability的方式拉起原生Activity

每一个Ability对应一个StageActivity,启动Ability实际是拉起对应的StageActivity。

所以将原生Activity按照上文中Ability对应StageActivity的规则命名,可以用启动Ability的方式拉起原生Activity。

// xxx.etslet want: Want = {bundleName: 'com.example.helloworld',moduleName: 'entry', //小写abilityName: 'Jump', //首字母大写parameters:{id:1,name:'ArkUI-X'} //可选参数};let context = getContext(this) as common.UIAbilityContext;context.startAbility(want, (err, data) => {}); 
// xxx.java
public class EntryJumpActivity extends AppCompatActivity { //命名:moduleName + abilityName + “Activity”private static final String WANT_PARAMS = "params";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_jump);Intent intent = getIntent();String params = "";if (intent != null) {params = intent.getStringExtra(WANT_PARAMS);}}
}
http://www.lryc.cn/news/574795.html

相关文章:

  • 【软考高级系统架构论文】### 论软件系统架构评估
  • linux grep的一些坑
  • 接口自动化测试之 pytest 接口关联框架封装
  • Unity_导航操作(鼠标控制人物移动)_运动动画
  • matplotilb实现对MACD的实战
  • SQL关键字三分钟入门:UPDATE —— 修改数据
  • Camera Sensor接口协议全解析(五)SLVS-EC接口深度解析
  • Stable Diffusion 项目实战落地:打造完美海报的秘密武器 第二篇:边缘柔化、蒙版处理与图生图技术大揭秘!
  • 如何通过nvm切换本地node环境详情教程(已装过node.js更改成nvm)
  • 2025.6.24总结
  • useState为异步,测试一下编码时候是否考虑?
  • Unity反射机制
  • mongoose解析http字段值
  • Spring Boot 的Banner的介绍和设置
  • 中科米堆3D扫描逆向建模方案:汽车轮毂三维扫描抄数建模
  • elk+filebeat收集springboot项目日志
  • iwebsec靶场-文件上传漏洞
  • 串口助手实例
  • lib61850 代码结构与系统架构深度分析
  • 鸿蒙OH南向开发 轻量系统内核(LiteOS-M)【异常调测】
  • 针对基于深度学习的侧信道分析(DLSCA)进行超参数的贝叶斯优化
  • vue 3 计算器
  • Nginx性能优化配置指南
  • 6.24_JAVA_微服务_Elasticsearch搜索
  • vscode + Jlink 一键调试stm32 单片机程序(windows系统版)
  • Git简介和常用命令
  • Windows安装Emscripten‌/emsdk(成功)
  • Python 数据分析与可视化 Day 6 - 可视化整合报告实战
  • Javaweb - 5 事件的绑定
  • 技术伦理之争:OpenAI陷抄袭风波,法院强制下架宣传视频