ArkUI-X通过Stage模型开发Android端应用指南(二)
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);
}
}
}
ArkUI-X通过Stage模型开发Android端应用指南(二)的更多相关文章
- Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序
NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...
- Unity开发Android应用优化指南(下)
http://forum.china.unity3d.com/thread-27044-1-1.html 在Unity开发Android应用优化指南(上)一文中,从游戏性能,脚本等方面进行了分析和总结 ...
- Unity开发Android应用优化指南(上)
http://forum.china.unity3d.com/thread-27037-1-2.html 如今越来越多的开发者使用Unity开发Android及iOS项目,开发过程中难免会遇到一些性能 ...
- 开发android App干坏事(二)-wifi控制
本来今天打算换个话题的,鉴于昨天android篇反响还不错,最近也是在做这方面的东西,今天聊聊一个新的android的发现-wifi的控制(好吧,其实也不能说是坏事,只是觉得wifi安全还是要引起警示 ...
- 从零開始开发Android版2048 (二)获取手势信息
今天是尝试開始Android版2048小游戏的第二天.在今天,我主要学习了怎样获取用户在屏幕滑动的手势,以及对布局进行了一些小小的完好. 获取用户操作的手势(比方向左滑.向右滑等)主要用到了Gestu ...
- Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...
- Vue项目用于Ios和Android端开发
起因 前公司商城App项目使用的是H5开发,有微信公众号.Ios和Android三个版本,H5版本是自己写的一套框架,已经用了有些年头了,承载不下不断涌现出的新需求.而Ios和Android端通过we ...
- JMessage Android 端开发详解
目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 IM 应用会需要有哪些功能? 用户注册 / 登 ...
- 短视频技术详解:Android端的短视频开发技术
在 <如何快速实现移动端短视频功能?>中,我们主要介绍了当前短视频的大热趋势以及开发一个短视频应用所涉及到的功能和业务.在本篇文章中,我们主要谈一谈短视频在Android端上的具体实现技术 ...
随机推荐
- ASP.NET 自定义DataTable数据
using System.Data; //DataTable try { DataTable dt = new DataTable(); dt.Columns.Add("Bu ...
- 新装ubuntu电脑的一些调整
必要命令的安装 必要开发工具的安装 更换国内软件源 /etc/apt/sources.list文件,后面添加下面地址用来添加阿里源 deb http://mirrors.aliyun.com/ubun ...
- C#使用Blazor编译WebAssembly供前端调用(一),关于SkiaSharp相关问题
目前信创热潮开始掀起,而C#很多行业开发的都是桌面端,迁移到网页端常常会因为很多库不支持或者不友好导致项目一直卡着. 最近一直在网上找灵感,偶然发现Web Assembly,一开始我还没不知道这是什么 ...
- DeepSeek+Coze实战:如何从0到1打造一个热点监控智能体
大家好,我是汤师爷,专注AI智能体分享~ 短视频小白经常会遇到这样的困扰. 每天花大量时间刷视频,想要找到你所在赛道的爆款内容,却总是难以系统地整理和分析? 想要批量获取某个关键词的爆款视频数据,但是 ...
- 代码随想录第十五天 | Leecode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、222. 完全二叉树的节点个数
Leecode 110. 平衡二叉树 题目描述 给定一个二叉树,判断它是否是 平衡二叉树(是指该树所有节点的左右子树的高度相差不超过 1.) 示例 1: 输入:root = [3,9,20,null, ...
- 使用 Go-Spring 构建最小 Web API
前言 Go 语言以简单著称,一个很明显的例子就是只需要很少的代码即可实现一个最小的 Web API .Go-Spring 融合了 Go 简单和 Spring 自动配置的优点.本文通过几个实现最小 We ...
- SQL 强化练习 (八)
继续练习写sql, 不能停下来. 今天还额外对 Excel 拼接 sql 语句做了一个代码实现, 逻辑是蛮简单的, 发现其实很多东西都是蛮简单的, 只要一点点去做, 明白逻辑过后, 慢慢去调试, 都是 ...
- Polarctf -- Re(1)
Polarctf之简单逆向 1. shell 用exeinfope查看下程序结构, 发现存在upx壳 用upx工具脱壳, upx.exe -d shell.exe 再使用IDAPro打开 #flag{ ...
- Number of Islands——LeetCode进阶路
原题链接https://leetcode.com/problems/number-of-islands/ 题目描述 Given a 2d grid map of '1's (land) and '0' ...
- 线下IDC数据中心迁移至阿里云详细方案
一.迁移前准备 1. 迁移规划 资源评估 统计需迁移的数据库类型.版本.数据量(如 MySQL 5.7.SQL Server 2019.文件存储系统等). 评估应用依赖关系,明确停机窗口(建议业务低峰 ...