写点什么

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

作者:龙儿筝
  • 2025-06-24
    湖北
  • 本文字数:3399 字

    阅读完需:约 11 分钟

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

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

import ohos.stage.ability.adapter.StageApplication;
public class HiStageApplication extends StageApplication { @Override public 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;
@Override public 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;
@Override protected 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 {
@Override public 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.etsexport 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 { ... }...}
复制代码

支持的参数类型列表

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 {    @Override    protected 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.etsexport 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 提供的接口详细如下:


注意事项

  • 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.ets let 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.javapublic class EntryJumpActivity extends AppCompatActivity { //命名:moduleName + abilityName + “Activity”    private static final String WANT_PARAMS = "params";    @Override    protected 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);        }    }}
复制代码


发布于: 刚刚阅读数: 5
用户头像

龙儿筝

关注

还未添加个人签名 2024-10-27 加入

还未添加个人简介

评论

发布
暂无评论
ArkUI-X通过Stage模型开发Android端应用指南(二)_龙儿筝_InfoQ写作社区