0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS 学习路之开发篇 ——Intent

王程 来源:jf_75796907 作者:jf_75796907 2024-02-20 14:52 次阅读

Intent

基本概念

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

wKgaomXUS_6AdNTpAADjbc4OoZM532.png


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

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

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

说明 Intent 设置属性时,必须先使用 Operation 来设置属性。如果需要新增或修改属性,必须在设置 Operation
后再执行操作。

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

根据 Ability 的全称启动应用

通过构造包含 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);

作为处理请求的对象,会在相应的回调方法中接收请求方传递的 Intent 对象。以导航到另一个 Ability 为例,导航的目标 Ability 可以在其 onStart () 回调的参数中获得 Intent 对象。 根据 Operation 的其他属性启动应用 有些场景下,开发者需要在应用中使用其他应用提供的某种能力,而不感知提供该能力的具体是哪一个应用。例如开发者需要通过浏览器打开一个链接,而不关心用户最终选择哪一个浏览器应用,则可以通过 Operation 的其他属性(除 BundleName 与 AbilityName 之外的属性)描述需要的能力。如果设备上存在多个应用提供同种能力,系统则弹出候选列表,由用户选择由哪个应用处理请求。以下示例展示使用 Intent 跨 Ability 查询天气信息。

请求方

在 Ability 中构造 Intent 以及包含 Action 的 Operation 对象,并调用 startAbilityForResult () 方法发起请求。然后重写 onAbilityResult () 回调方法,对请求结果进行处理。

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、在 Ability 中配置路由以便支持以此 action 导航到对应的 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。
    ...
}

审核编辑 黄宇


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    79

    文章

    1934

    浏览量

    29534
收藏 人收藏

    评论

    相关推荐

    润开鸿获鸿蒙先锋授牌,荣膺华为HarmonyOS开发服务商

    3月27日,华为HDD行业沙龙在北京举办,本次活动由HarmonyOS产品专家带来了精彩的议题分享,涵盖HarmonyOS操作系统介绍、HarmonyOS应用特性分享、意图框架介绍、行业解决方案应用、
    的头像 发表于 03-29 10:33 243次阅读
    润开鸿获鸿蒙先锋授牌,荣膺华为<b class='flag-5'>HarmonyOS</b><b class='flag-5'>开发</b>服务商

    拓维信息及旗下开鸿智谷同获华为HarmonyOS开发服务商认证

    近日,拓维信息及旗下开鸿智谷双双通过华为HarmonyOS开发服务商认证,成为华为“鸿蒙服务商先锋计划”认证级伙伴。秉持共同发展、共创价值的合作理念,拓维信息、开鸿智谷将携手华为打造
    的头像 发表于 03-29 08:13 177次阅读
    拓维信息及旗下开鸿智谷同获华为<b class='flag-5'>HarmonyOS</b><b class='flag-5'>开发</b>服务商认证

    免费学习鸿蒙(HarmonyOS开发,一些地址分享

    国内一流高校。通过鸿蒙班的设立,高校可以为学生提供专业的鸿蒙OS学习环境和丰富的实践机会,培养出更多的鸿蒙开发人才,为鸿蒙OS系统的生态建设做出贡献。 其中南京大学已经将HarmonyOS作为《移动
    发表于 01-12 20:48

    HarmonyOS鸿蒙原生应用开发设计- 隐私声明

    HarmonyOS设计文档中,为大家提供了独特的隐私声明,开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容,既可以符合HarmonyOS原生应用的
    发表于 10-31 14:16

    HarmonyOS鸿蒙原生应用开发设计- 流转图标

    HarmonyOS设计文档中,为大家提供了独特的流转图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的流转图标内容,既可以符合HarmonyOS原生应用的
    发表于 10-26 10:25

    HarmonyOS鸿蒙原生应用开发设计- 华为分享图标

    HarmonyOS设计文档中,为大家提供了独特的华为分享图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的华为分享图标内容,既可以符合HarmonyOS原生应用的
    发表于 10-25 14:28

    HarmonyOS鸿蒙原生应用开发设计- HarmonyOS Sans 字体

    HarmonyOS设计文档中,为大家提供了独特的字体,开发者可以根据需要直接引用。 开发者直接使用官方提供的字体内容,既可以符合HarmonyOS原生应用的
    发表于 10-23 16:12

    HarmonyOS语言基础类库开发指南上线啦!

    指南中提供了详细的介绍和开发指导,帮助开发者全面了解并发实现、容器类库基础操作、XML的生成解析与转换等。 本期HarmonyOS开发者资料直通车带您快速了解内容干货~ 一 语言基础类
    的头像 发表于 10-18 16:20 331次阅读
    <b class='flag-5'>HarmonyOS</b>语言基础类库<b class='flag-5'>开发</b>指南上线啦!

    DevEco Studio中如何设置HarmonyOS/OpenHarmony应用开发

    DevEco Studio默认为HarmonyOS应用开发,如果需要修改为OpenHarmony应用开发,修改方式如下。 一、总体说明 build-profile.json5为当前的模块信息 、编译
    发表于 09-14 14:50

    HarmonyOS/OpenHarmony应用开发-DevEco Studio帮助快速入门的使用

    DevEco Studio内置有帮助中心,初学HarmonyOS 及OpenHarmony应用、元服务的开发者,通过内置的帮助中去系统的学习相关内容,是边练边学,快速上手的最佳方式。 一、帮助 二
    发表于 09-13 16:28

    【活动驿站】3分钟参与HarmonyOS公众号内容调研,赢取周边好礼

    # 活动驿站 # 【活动驿站】栏目作为HarmonyOS官方活动的导航,在这里,无论是学习赋能的直播,线下见面的技术交流,还是一年一度的开发者大会,均能为开发者提供相关活动资讯。 感谢
    的头像 发表于 08-31 14:10 271次阅读
    【活动驿站】3分钟参与<b class='flag-5'>HarmonyOS</b>公众号内容调研,赢取周边好礼

    【活动驿站】一图看懂HarmonyOS极客马拉松2023

    # 活动驿站 # 【活动驿站】栏目作为HarmonyOS官方活动的导航,在这里,无论是学习赋能的直播,线下见面的技术交流,还是一年一度的开发者大会,均能为开发者提供相关活动资讯。 更多
    的头像 发表于 08-17 11:40 559次阅读
    【活动驿站】一图看懂<b class='flag-5'>HarmonyOS</b>极客马拉松2023

    HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

    HarmonyOS全方面与开发者建立联接,截止到2023年6月底,HDE(华为开发专家)发表超过300+场演讲,HarmonyOS原创专业性文章2000余
    发表于 08-14 15:08

    HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

    2023年8月6日华为开发者大会2023(HDC.Together)圆满收官,伴随着HarmonyOS 4的发布,华为向开发者发布了汇聚所有最新开发能力的
    的头像 发表于 08-11 12:10 710次阅读

    HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

    2023年8月4日的华为开发者大会2023(HDC.Together)拉开帷幕,伴随着HarmonyOS 4的发布,华为向开发者发布了汇聚所有最新开发能力的
    的头像 发表于 08-09 17:16 905次阅读