购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.12 Intent

在HarmonyOS中,Intent是对象之间传递信息的载体。例如,当一个Ability需要启动另一个Ability时,或者一个AbilitySlice需要导航到另一个AbilitySlice时,可以通过Intent指定启动的目标同时携带相关数据。

Intent的构成元素包括Operation与Parameters。

5.12.1 Operation与Parameters

Operation由表5-1所示的属性组成。

表5-1 Operation的属性

除上述属性之外,开发者也可以通过Parameters传递某些请求所需的额外信息。Parameters是一种支持自定义的数据结构。

当Intent用于发起请求时,根据指定元素的不同,启动分为两种类型:

(1)如果同时指定了BundleName与AbilityName,则根据Ability的全称(如com.waylau.hmos. PayAbility)直接启动应用。

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

5.12.2 根据Ability的全称启动应用

通过构造包含BundleName与AbilityName的Operation对象,可以启动一个Ability,并导航到该Ability。

在5.8节的ServiceAbilityLifeCycle应用中,启动本地服务的方式就是根据Ability的全称启动应用的一个示例,代码如下:

在上述代码中,通过Intent中的OperationBuilder类构造operation对象,指定设备ID(空串表示当前设备)、应用包名和Ability名称。

5.12.3 根据Operation的其他属性启动应用

有些场景下,开发者需要在应用中使用其他应用提供的某种能力,而不感知提供该能力的具体是哪一个应用。例如,开发者需要通过浏览器打开一个链接,而不关心用户最终选择哪一个浏览器应用,则可以通过Operation的其他属性(除BundleName与AbilityName之外的属性)描述需要的能力。如果设备上存在多个应用提供同种能力,系统则弹出候选列表,由用户选择由哪个应用处理请求。以下示例展示使用Intent跨Ability查询天气信息。

创建一个名为IntentOperationWithAction的Car设备类型应用。

1. 创建Page

通过DevEco Studio创建一个关于天气信息的Page,如图5-26所示。

图5-26 创建Page

自动创建如下WeatherAbilitySlice类:

WeatherAbility使用的布局名称是ability_weather。修改ability_weather.xml,内容如下:

上述布局会在页面正中显示Weather字样。

2. 配置路由

修改配置文件,增加action.weather路由信息,内容如下:

上述配置,是为了配置路由以便支持以此action导航到对应的AbilitySlice。

3. 修改WeatherAbility

重写WeatherAbility类的onActive()方法,代码如下:

上述代码中:

(1)resultIntent是Intent的示例,用于返回结果。

(2)通过Parameters的方式传递天气信息。Parameters是一种支持自定义的数据结构,通过setParam()方法,将温度17放到resultIntent中。

(3)调用setResult()方法暂存返回结果。

4. 修改MainAbilitySlice

MainAbilitySlice作为请求方,修改代码如下:

上述代码中:

(1)Text中增加了单击事件以触发请求,并路由到action.weather。

(2)重写了onAbilityResult()方法,用来接收请求的返回值。注意,resultData获取的返回参数的值是字符串,因此需要用getStringParam()方法;如果是整型,则可以使用getIntParam()方法。

5. 运行应用

运行应用,界面效果如图5-27所示。

单击文本Hello World,触发路由到action.weather的请求,界面效果如图5-28所示。

图5-27 应用运行效果

图5-28 Weather界面

此时,控制台HiLog输出内容如下:

单击模拟器返回按钮,返回Hello World界面,如图5-29所示。

图5-29 返回Hello World界面

此时,控制台HiLog输出内容如下:

从上述日志文件中也可以看出,MainAbilitySlice已经能够获取WeatherAbility的返回值,温度是“17”。 xRqsIt0ieuk7ApR5jUEV0aJxyJCewrJPGgBuIVFlxgIaXiH7ux6loVpnt0urWeP9

点击中间区域
呼出菜单
上一章
目录
下一章
×