HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(五)

news2024/11/26 8:43:48

UIAbility组件间交互(设备内)
UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。
本文将从如下场景分别介绍设备内UIAbility间的交互方式。
启动应用内的UIAbility。启动应用内的UIAbility并获取返回结果。启动其他应用的UIAbility。启动其他应用的UIAbility并获取返回结果。启动UIAbility的指定页面。通过Call调用实现UIAbility交互(仅对系统应用开放)。
一、启动应用内的UIAbility
当一个应用内包含多个UIAbility时,存在应用内启动UIAbility的场景。例如在支付应用中从入口UIAbility启动收付款UIAbility。
假设应用中有两个UIAbility:EntryAbility和FuncAbility(可以在应用的一个Module中,也可以在的不同Module中),需要从EntryAbility的页面中启动FuncAbility。
1.在EntryAbility中,通过调用startAbility()方法启动UIAbility,want为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的UIAbility名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。示例中的context的获取方式参见获取UIAbility的Context属性。

let wantInfo = {
    deviceId: '', // deviceId为空表示本设备
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必选
    parameters: { // 自定义信息
        info: '来自EntryAbility Index页面',
    },
}
// context为调用方UIAbility的AbilityContext
this.context.startAbility(wantInfo).then(() => {
    // ...
}).catch((err) => {
    // ...
})

2.在FuncAbility的生命周期回调文件中接收EntryAbility传递过来的参数。

import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';

export default class FuncAbility extends UIAbility {
    onCreate(want, launchParam) {
    // 接收调用方UIAbility传过来的参数
        let funcAbilityWant = want;
        let info = funcAbilityWant?.parameters?.info;
        // ...
    }
}

3.在FuncAbility业务完成之后,如需要停止当前UIAbility实例,在FuncAbility中通过调用terminateSelf()方法实现。

// context为需要停止的UIAbility实例的AbilityContext
this.context.terminateSelf((err) => {
    // ...
});

二、启动应用内的UIAbility并获取返回结果
在一个EntryAbility启动另外一个FuncAbility时,希望在被启动的FuncAbility完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和帐号登录功能分别设计为两个独立的UIAbility,在帐号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。
1.在EntryAbility中,调用startAbilityForResult()接口启动FuncAbility,异步回调中的data用于接收FuncAbility停止自身后返回给EntryAbility的信息。示例中的context的获取方式参见获取UIAbility的Context属性。

let wantInfo = {
    deviceId: '', // deviceId为空表示本设备
    bundleName: 'com.example.myapplication',
    abilityName: 'FuncAbility',
    moduleName: 'module1', // moduleName非必选
    parameters: { // 自定义信息
        info: '来自EntryAbility Index页面',
    },
}
// context为调用方UIAbility的AbilityContext
this.context.startAbilityForResult(wantInfo).then((data) => {
    // ...
}).catch((err) => {
    // ...
})

2.在FuncAbility停止自身时,需要调用terminateSelfWithResult()方法,入参abilityResult为FuncAbility需要返回给EntryAbility的信息。

const RESULT_CODE: number = 1001;
let abilityResult = {
    resultCode: RESULT_CODE,
    want: {
        bundleName: 'com.example.myapplication',
        abilityName: 'FuncAbility',
        moduleName: 'module1',
        parameters: {
            info: '来自FuncAbility Index页面',
        },
    },
}
// context为被调用方UIAbility的AbilityContext
this.context.terminateSelfWithResult(abilityResult, (err) => {
    // ...
});

3.FuncAbility停止自身后,EntryAbility通过startAbilityForResult()方法回调接收被FuncAbility返回的信息,RESULT_CODE需要与前面的数值保持一致。

const RESULT_CODE: number = 1001;

// ...

// context为调用方UIAbility的AbilityContext
this.context.startAbilityForResult(want).then((data) => {
    if (data?.resultCode === RESULT_CODE) {
        // 解析被调用方UIAbility返回的信息
        let info = data.want?.parameters?.info;
        // ...
    }
}).catch((err) => {
    // ...
})

三、启动其他应用的UIAbility
启动其他应用的UIAbility,通常用户只需要完成一个通用的操作(例如需要选择一个文档应用来查看某个文档的内容信息),推荐使用隐式Want启动。系统会根据调用方的want参数来识别和启动匹配到的应用UIAbility。
启动UIAbility有显式Want启动和隐式Want启动两种方式。
显式Want启动:启动一个确定应用的UIAbility,在want参数中需要设置该应用bundleName和abilityName,当需要拉起某个明确的UIAbility时,通常使用显式Want启动方式。

隐式Want启动:根据匹配条件由用户选择启动哪一个UIAbility,即不明确指出要启动哪一个UIAbility(abilityName参数未设置),在调用startAbility()方法时,其入参want中指定了一系列的entities字段(表示目标UIAbility额外的类别信息,如浏览器、视频播放器)和actions字段(表示要执行的通用操作,如查看、分享、应用详情等)等参数信息,然后由系统去分析want,并帮助找到合适的UIAbility来启动。当需要拉起其他应用的UIAbility时,开发者通常不知道用户设备中应用的安装情况,也无法确定目标应用的bundleName和abilityName,通常使用隐式Want启动方式。
本部分主要讲解如何通过隐式Want启动其他应用的UIAbility。
1.将多个待匹配的文档应用安装到设备,在其对应UIAbility的module.json5配置文件中,配置skills的entities字段和actions字段。

{
  "module": {
    "abilities": [
      {
        // ...
        "skills": [
          {
            "entities": [
              // ...
              "entity.system.default"
            ],
            "actions": [
              // ...
              "ohos.want.action.viewData"
            ]
          }
        ]
      }
    ]
  }
}

2.在调用方want参数中的entities和action需要被包含在待匹配UIAbility的skills配置的entities和actions中。系统匹配到符合entities和actions参数条件的UIAbility后,会弹出选择框展示匹配到的UIAbility实例列表供用户选择使用。示例中的context的获取方式参见获取UIAbility的Context属性。

let wantInfo = {
    deviceId: '', // deviceId为空表示本设备
    // uncomment line below if wish to implicitly query only in the specific bundle.
    // bundleName: 'com.example.myapplication',
    action: 'ohos.want.action.viewData',
    // entities can be omitted.
    entities: ['entity.system.default'],
}

// context为调用方UIAbility的AbilityContext
this.context.startAbility(wantInfo).then(() => {
    // ...
}).catch((err) => {
    // ...
})

效果示意如下图所示,点击“打开PDF文档”时,会弹出选择框供用户选择。
 

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(五)-开源基础软件社区


3.在文档应用使用完成之后,如需要停止当前UIAbility实例,通过调用terminateSelf()方法实现。

// context为需要停止的UIAbility实例的AbilityContext
this.context.terminateSelf((err) => {
    // ...
});

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/773823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞行动力学 - 第11节-纵向静稳定性及各部件贡献 之 基础点摘要

飞行动力学 - 第11节-纵向静稳定性及各部件贡献 之 基础点摘要 1. 气流角2. 操纵面偏角3. 系数的符号4. 纵向、横向、航向稳定性5. 纵向静稳定性5.1 定义5.2 准则5.3 举例5.4 假设5.5 分析5.5.1 机身贡献5.5.2 机翼贡献5.5.3 尾翼贡献 6. 参考资料 1. 气流角 迎角:…

第二章 表的操作与数据类型

第二章 表的操作 一、表的创建(1)语法(2)示例 二、查看库中所有表以及具体表结构(1)语法(2)示例 三、表的修改(1)语法(2)示例 四、表的…

cesium实战(1)、cesium 加载本地json、GeoJson数据

1、cesium加载本地图层json图层数据 并设置样式 添加图层 // 加载路网数据 wms数据服务let addRoadLayer () > {Cesium.GeoJsonDataSource.load(/cesium/layers/road_84.json, {stroke: Cesium.Color.YELLOW,//多边形或线的颜色 strokeWidth: 3,//多边形或线 宽度clampToG…

win10/win11 无线显示器 启用输入 的问题分析与解决

win10、win11系统自带了“无线显示器”应用,可以作为接收端接受其他PC或者手机等设备的投屏显示。 但是使用手机等设备投屏,尤其是三星、华为等手机的类PC模式时总会提示“要启用输入,请转到你的电脑,选择“操作中心”>“连接…

连接另一台电脑的虚拟机

在一个局域网中,ping通另一台电脑是件很容易的事。但是经常会遇到,需要ping到另一台电脑里面的虚拟机,因为我们需要连接它的数据库,或者其他服务。 假设PC A要连接PC B上的虚拟机C。 我们需要做的是: 将C与B的网络连…

C语言数据结构(链表概念讲解和插入操作)

文章目录 前言一、什么是链表二、链表的优点和缺点三、链表节点的定义四、初始化链表五、链表的插入1.头部插入2.尾部插入3.中间插入 六、遍历链表七、释放链表总结 前言 本篇文章带大家正式的来学习数据结构,数据结构是学习操作系统,和深入C语言必不可…

影响伦敦金走势的两大因素是什么?

在伦敦金市场中经历过一段时间,很多人发现,其实要精准预测伦敦金的走势,尤其是短线的走势,是非常难的。但是,判断其大势,却是有一定规律的。在投资世界中,伦敦金投资之外的一些品种的涨跌号称是…

Ubuntu22.04安装显卡驱动(高速、避错版)

关于显卡驱动安装踩坑不少坑,前前后后重装了6、7次,总结了一下目前网上的各种安装方式,整理了本文。 目录导航 1 准备工作1.1 关闭安全模式1.2 切换独显模式1.3 更新软件列表和安装必要软件、依赖1.4 禁用nouveau (nouveau是通用的驱动程序)1…

SpringCloud学习路线(5)—— Nacos配置管理

一、统一配置管理 需求: 微服务配置能实现统一的管理,比如希望改动多个配置,但不希望逐个配置,而是在一个位置中改动,并且服务不用重启即用(热更新)。 (一)使用配置管理…

【大模型】与 ChatGPT 齐平、可商用、更强的 LLaMA2 来了

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介论文GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日:Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合,其规模从70亿到…

【极简 亲测】已拦截跨源请求:同源策略禁止读取位于....的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

CORS是Cross-Origin Resource Sharing。 解决 首先这个是浏览器层面的拦截。下面的方法都是解除浏览器拦截的方式。 解除了之后还是有可能其他方面有问题的,但是那个会提示其他错误。 比如CORs Failed之类的,这个是没收到response,大概率是…

施耐德plc编程软件转以太网模块

捷米特JM-ETH-SC 是一款经济型的以太网通讯处理器,是为满足日益增多的工厂设备信息化需求(设备网络监控和生产管理)而设计,用于施耐德Quantumn/Premiun/TSXMicro/Twdio/M200/M218/M221/M241/M238/M25 等系列 PLC 的以太网数据采集…

分布式光伏电站运维平台在石化行业的应用光伏发电数据实时监控

摘要:为实现绿色发展和“净零排放”的目标,近些年来国内外不少能源化工企业进入光伏发电领域。如何做好光伏电站的运行维护,成为石化企业不得不思考的重要课题。本文从分布式光伏电站消防安全、作业安全、环保管理等方面进行思考,…

浮点类型详解及 IEEE754 规定

【C语言趣味教程】(3) 浮点类型:单精度浮点数 | 双精度浮点型 | IEEE754 标准 🔗 《C语言趣味教程》👈 猛戳订阅!!! ​—— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是…

亿发软件:数字化大中型制造企业生产管理应用,实现智慧工厂信息化

随着信息技术与制造业的深度协调,作为企业发展的趋势,大中型制造企业需要拥抱信息化建设。通过运用信息技术和数字化运营,大中型制造企业的生产、设计、经营、管理、后续服务等都实现自动化、智能化。大中型制造企业信息化建设解决方案&#…

Spark(31):Spark性能调优之算子调优

目录 0. 相关文章链接 1. mapPartitions 2. foreachPartition优化数据库操作 3. filter与coalesce的配合使用 4. repartition解决SparkSQL低并行度问题 5. reduceByKey预聚合 0. 相关文章链接 Spark文章汇总 1. mapPartitions 普通的 map 算子对 RDD 中的每一个元素进行…

肖sir___讲解环境__001

1.jdk是什么? jdk是java代码的编译器,可以理解为“翻译”。 (1)windows中jdk是在dos中查询:java -version (2)linux中jdk是在linux服务器查询:java -version ** ** 2、搭建环境服务…

C++初阶 - 3.类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 1.类…

guava-31.1-android.jar时出错; zip file is empty

配置nacos-client时&#xff0c;启动报错guava-31.1-android.jar时出错; zip file is empty 翻看了一下依赖的nacos-api的maven包中&#xff0c;果然有这个版本的guava 在nacos-api中屏蔽掉 <dependency><groupId>com.alibaba.nacos</groupId><artifactI…

【技能实训】DMS数据挖掘项目-Day14

文章目录 任务16【任务16.1】数据的请求和响应【任务16.2】创建JTable的数据适配器类MatchedTableModel&#xff0c;直接从数据库获取数据。 任务16 【任务16.1】数据的请求和响应 数据的请求和响应方法 程序设计 package com.qst.dms.service;import com.qst.dms.net.Requ…