文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用FeatureAbility模块启动其他Ability

2024-12-01 15:40

关注

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

1、前言

在HarmonyOS/OpenHarmony应用程序中一切皆Ability(能力),即是每个界面都可以是Ability,每个功能都可以是Ability,又将Ability分为FA(FeatureAbility)和PA(ParticleAbility)两种类型。其中FA唯一支持的模板Page Ability,其用于提供与用户交互能力,在设备主界面上有可见的桌面图标,能够通过图标启动应用程序进行交互操作;而PA又分为Service Ability和Data Ability,前者用于提供后台运行任务的能力,后者用于应用管理自身和其他应用存储数据的访问能力,因此PA是无界面的,用户无法对其直接操作,可以和FA配合使用。

在JS/eTS语言中,Ability框架又被分为FA模型和Stage模型(该模型目前仅支持OpenHarmony API9)。在DevEco Studio 3.0 Beta4中HarmonyOS使用了OpenHarmony API8,因此可以大胆猜测一下后续API版本会不会以OpenHarmony API版本为主。 本节以API8为主,关于Stage模型的详细介绍将在今后的章节中介绍。此处的FA是一种模型,其中的Ability分为PageAbility、ServiceAbility、DataAbility、FormAbility,与FA(FeatureAbility不能混淆)。

JS/eTS语言是方舟开发框架(ArkUI)为开发者开发应用程序提供的两种开发范式,前者是基于JS扩展的类Web开发范式,若开发者具备小程序开发经验则可直接上手,更倾向于Web前端开发人员;而后者则是基于TS扩展的声明式开发范式,与Flutter开发应用程序类似,更倾向于移动系统应用和系统应用开发人员。

2、准备工作

3、有界面的PageAbility

通过DevEco Studio创建Application(应用程序)会默认创建PageAbility模板代码,在ArkUI框架中,PageAbility相关能力是通过单独的featureAbility模块实现的,其由于为用户提供了可交互的界面,因此生命周期较于其他Ability复杂度较高,PageAbility生命周期回调通过app.js/app.ets中的函数实现,当前app.js仅支持onCreate和onDestroy回调,而app.ets支持全量生命周期回调,本节以eTS语言为主,主要介绍eTS语言开发中PageAbility生命周期回调,如下图所示:

可以在app.ets中将所有的声明周期函数重写,并运行应用程序查看声明周期回调信息,代码如下所示:

export default {
onCreate() {
console.info('FaeTSSample Application onCreate')
},
onActive() {
console.info('FaeTSSample Application onActive')
},
onInactive() {
console.info('FaeTSSample Application onInactive')
},
onHide() {
console.info('FaeTSSample Application onHide')
},
onShow() {
console.info('FaeTSSample Application onShow')
},
onDestroy() {
console.info('FaeTSSample Application onDestroy')
},
}

(1)使用featureAbility模块启动本地PageAbility

HarmonyOS/OpenHarmony为用户提供了路由跳转方式,而路由跳转方式是页面间跳转,可以利用featureAbility模块进行Ability之间的跳转,并且featureAbility仅能在PageAbility类型的Ability中调用。

使用featureAbility模块需要先在具体的业务逻辑界面使用以下代码引入模块:

import featureAbility from '@ohos.ability.featureAbility';

featureAbility模块提供了多个方法用于启动新的Ability、获取dataAbilityHelper、设置此PageAbility、获取当前Ability对应的窗口、连接服务等能力。featureAbility提供的启动新Ability能力如下表所示:

名称

描述

startAbility

启动新的Ability

startAbilityForResult

启动新的Ability,并在该Ability被销毁时返回执行结果

接下来聊聊在应用程序中如何启动新的Ability,首先在项目entry目录右键New–>Ability --> Page Ability,填写Ability相关信息如下图所示。

目录结构如下图所示:

startAbility方法有两种调用形式,一种是callback,另一种是Promise,都需要传递StartAbilityParameter参数设定目标Ability。

startAbility(StartAbilityParameter, AsyncCallback<number>): void
startAbility(StartAbilityParameter): Promise<number>

其中StartAbilityParameter参数由Want(包含有关目标Ability信息)和abilityStartSetting(可以通过该属性携带参数,不是必须条件)。其中国Want参数提供系统的基本通信能力,比如在打开时指定新启动的Ability信息,或者销毁启动的Ability后返回的额外信息。点击MainAbility中的按钮启动SecondAbility,修改代码如下所示:

// MainAbility/page/index.ets
featureAbility.startAbility({
want: {
bundleName: "com.tetcl.fts", // 包描述,对应config.json中的app.bundleName,当然也可以是本机其他应用的包名
abilityName: "com.example.entry.SecondAbility" // 目标Ability名称,对应config.json中的module.package.类名
}
})

使用真机设备运行应用程序,点击按钮,查看是否跳转到Second Ability界面。

(2)使用featureAbility模块启动远程PageAbility

在Want模块中,有一个deviceId属性,该属性表示运行指定Ability的设备ID,也就是若我们知道了其他设备的标识码和包名称以及具体的Ability名称,我们就可以启动其他设备的应用程序。该属性的值需要使用DeviceManager模块的接口获取,当前仅对系统应用开放,也就是自定义的应用程序是无法调起它的Ability。由于设备有限,无法提供测试,因此具体的操作详见官方文档。

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​​。

来源:​​51CTO开源基础软件社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯