OpenHarmony开源社区
直播中

而无返还

9年用户 1260经验值
擅长:光电显示
私信 关注
[经验]

HarmonyOS使用Intent控件的教程

基本概念

Intent是对象之间传递信息的载体。例如,当一个AbilitySlice启动另一个AbilitySlice时,或者一个AbilitySlice需要导航到另一个AbilitySlice时,可以通过Intent指定启动的同时携带相关数据。Intent的组成部分包括操作与参数,具体描述见表1 。

表1 Intent的构成元素


当 Intent 发起请求时,指定元素的不同,根据类型分为:

如果同时指定了BundleName和AbilityName,则根据Ability的全称(例如“com.demoapp.FooAbility”)来直接启动应用。

如果未同时指定BundleName和AbilityName,则根据Operation中的其他属性来启动应用。

说明

Intent 设置属性时,必须先修改使用操作来设置属性。如果需要添加或设置属性,必须在设置操作时执行操作。

关于 Intent 最简单的使用页面,可快速查看示例代码。“实现页面方法”重点描述了使用 Intent 实现两个跳转关系的操作。

可知能力的全称启动应用

通过构造启动包含BundleName和AbilityName的Operation对象,可以一个Ability、并导航到该Ability。示例代码如下:

Intent intent = new Intent();

// 通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称

Operation operation = new Intent.OperationBuilder()

.withDeviceId("") .withBundleName("com.demoapp") .withAbilityName("com.demoapp.FooAbility") .build();

// 把operation设置到intent中

intent.setOperation(operation);

startAbility(intent);

作为处理请求的对象,在适当的导航方法中传递到其意向对象。

根据Operations的其他属性启动应用

那些应用程序中使用不同的能力,应用者需要通过另外一个链接提供的应用程序,最终用户需要打开一个有趣的浏览器来选择。一个应用程序,则可以通过操作的其他属性(除BundleName和AbilityName之外的属性)需要描述的能力。如果设备上存在多个应用程序提供相同的浏览器能力,系统则弹出项目列表,由用户选择哪个应用处理请求。以下示例展示使用意图跨能力查询天气信息。

请求方

在Ability中构造Intent包含Action的操作对象,并调用startAbilityForResult()方法请求,然后在结果中对AbilityResult()方法调用方法进行处理。

private void queryWeather() {

Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction(Intent.ACTION_QUERY_WEATHER) .build(); intent.setOperation(operation); startAbilityForResult(intent, REQ_CODE_QUERY_WEATHER);

}

@Override

protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) {

switch (requestCode) { case REQ_CODE_QUERY_WEATHER: // Do something with result. ... return; default: ... }

}

处理方

  1. 作为的对象,首先需要在配置文件中提供请求者的能力,以便据此本人并作为处理请求的处理。

{

"module": { ... "abilities": [ { ... "skills":[ { "actions":[ "ability.intent.QUERY_WEATHER" ] } ] ... } ] ... } ...

}

2.在配置路由以便支持不同操作导航到的AbilitySlice。

@Override

protected void onStart(Intent intent) {

... addActionRoute(Intent.ACTION_QUERY_WEATHER, DemoSlice.class.getName()); ...

}

3.在Ability中处理请求,并调用setResult()方法暂存返回结果。

@Override

protected void onActive() {

... Intent resultIntent = new Intent(); setResult(0, resultIntent); //0为当前Ability销毁后返回的resultCode。 ...

}
原作者:PengLei

回帖(3)

玩硬件的女孩纸

2022-5-23 17:12:06
已get!
举报

修霸哥治脱发

2022-5-23 21:05:55
可以说是十分详细了!
举报

陈皓雷

2022-5-25 19:25:56
收益匪浅,感谢分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分