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 {...}
...
}
支持的參數類型列表
參數類型 | 參數類型值 |
---|---|
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 {@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提供的接口詳細如下:
接口 | 返回值 | 參數 | 功能 |
---|---|---|---|
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.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);}}
}