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

举报
yd_233809488 发表于 2025/06/24 22:14:37 2025/06/24
【摘要】 StageApplication初始化支持以下三种方式 1. 通过继承StageApplication的方式进行初始化import ohos.stage.ability.adapter.StageApplication;public class HiStageApplication extends StageApplication { @Override public void...

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.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 {
    ...
  }
...
}

支持的参数类型列表

参数类型 参数类型值
boolean 1
int 5
double 9
string 10

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.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提供的接口详细如下:

接口 返回值 参数 功能
addValue WantParams String key, boolean value 为WantParams添加"String"类型的key,"boolean"类型的值value。
addValue WantParams String key, int value 为WantParams添加"String"类型的key,"int"类型的值value。
addValue WantParams String key, double value 为WantParams添加"String"类型的key,"double"类型的值value。
addValue WantParams String key, String value 为WantParams添加"String"类型的key,"String"类型的值value。
addValue WantParams String key, boolean[] value 为WantParams添加"String"类型的key,"boolean[]"类型的值value。
addValue WantParams String key, int[] value 为WantParams添加"String"类型的key,"int[]"类型的值value。
addValue WantParams String key, double[] value 为WantParams添加"String"类型的key,"double[]"类型的值value。
addValue WantParams String key, String[] value 为WantParams添加"String"类型的key,"String[]"类型的值value。
addValue WantParams String key, WantParams value 为WantParams添加"String"类型的key,"WantParams"类型的值value。
getValue Object String key 获取键值为key的属性值,如果键值不存在则返回null。
toWantParamsString String - 将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.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.java
public 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);
        }
    }
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。