摘要:使用原生Activity拉起Ability时,需使用原生应用的startActivity方法,参数的传递需要通过Intent中的putExtra进行设置,目前有两种方式进行参数的传递,具体如下:
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":值 }, { ... } ] }
示例代码
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); } }
# 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) ...
示例代码
此示例展示了在启动一个新的 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); } }
# 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。
注意事项
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); } } }
来源:龙儿筝