首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ArkUI-X通过Stage模型开发Android端应用指南(二)

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

原创
作者头像
龙儿筝
发布2025-06-24 22:06:11
发布2025-06-24 22:06:11
7600
代码可运行
举报
文章被收录于专栏:鸿蒙鸿蒙
运行总次数:0
代码可运行

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

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

代码语言:java
复制
import ohos.stage.ability.adapter.StageApplication;

public class HiStageApplication extends StageApplication {
    @Override
    public void onCreate() {
        super.onCreate();
    }
}

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

代码语言:java
复制
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实例进行初始化

代码语言:java
复制
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格式

代码语言: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字符串。

代码语言:java
复制
    WantParams wantParams = new WantParams();
    wantParams.addValue("key1", "value")
            .addValue("key2", 123)
            .addValue("key3", false)
            ...
示例代码

此示例展示了在启动一个新的 Ability 时,如何通过 WantParams 实现参数传递。具体涉及使用 WantParams 中的 addValue、getValue 和 toWantParamsString 接口,完成数据的自定义、获取和修改。

代码语言:java
复制
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。

代码语言:javascript
代码运行次数:0
运行
复制
// 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) => {
    }); 
代码语言:java
复制
// 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);
        }
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • StageApplication初始化支持以下三种方式
    • 1. 通过继承StageApplication的方式进行初始化
    • 2. 继承Android原生Application方式,在onCreate方法中创建StageApplicationDelegate实例进行初始化
    • 3. 在Activity中创建StageApplicationDelegate实例进行初始化
  • 通过原生Activity拉起Ability并传递参数
    • 1. 使用手动方式
      • 参数格式
      • 示例代码
      • 支持的参数类型列表
    • 2. WantParams工具类
      • 参数格式
      • 示例代码
      • 支持的参数类型
    • 注意事项
  • 用启动Ability的方式拉起原生Activity
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档