HarmonyOS —— UIAbility 页面跳转总结

2023-12-27 17:44

本文主要是介绍HarmonyOS —— UIAbility 页面跳转总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HarmonyOS —— UIAbility 页面跳转总结

Author:Gorit

Date:2023年12月27日

一、系统环境

  1. HarmonOS API9
  2. SDK 3.1.0
  3. Stage 模型

二、应用内跳转

在应用内之前实现不同 page 的跳转,我们使用 router 即可,页面跳转主要支持如下两个方法:

  • router.pushUrl():目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。
  • router.replaceUrl():目标页会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

router 跳转模式

  • Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。
  • Single:单实例模式。即如果目标页的url在页面栈中已经存在同url页面,则离栈顶最近的同url页面会被移动到栈顶,并重新加载;如果目标页的url在页面栈中不存在同url页面,则按照标准模式跳转。

具体的使用案例 及 应用场景可以查看 官方文档,我这里就不做多余赘述

PS:在卡 ArkTS 卡片中可采用 postCardAction 实现 的跳转

三、UIAbility 之间跳转

原理:基于 startAbility 实现页面跳转,主要应用场景如下

  1. 打开当前 App
  2. 选择多个 App,选择打开某一个 App
  3. 打开指定 App

3.1 了解什么是 UIAbility?

概述:

UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。

UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。

更多的 UIAbility 的信息需要大家自行查阅文档~,比如 生命周期,启动方式等等

3.2 如何启动其它应用 UIAbility?

  1. 获取 UIAbility 上下文信息
    通过文档得知,我们可以在 EntryAbility 中直接获取当前实例的上下文,也可以自己在任意 Page 中去获取 UIAbility 的实例信息
  2. 定义 Want 参数配置,这里东西有很多,我们进需要关注两个配置参数即可 (bundleName 和 abilityName)
  3. 调用 context.startAbility(want).then(...) 实现调用其他 UIAbility

转换成代码如下:

import common from '@ohos.app.ability.common'// 业务代码 ...
{Button().onClick(() => {startSettingsMainAbilityExplicit()})}function startSettingsMainAbilityExplicit() {console.log("begin to navigate");let context = getContext(this) as unknown as common.UIAbilityContext;let want = {deviceId: "",bundleName: 'com.examples', // com.ohos.settingsabilityName: 'EntryAbility', // com.ohos.settings};// previewer 无法调用context.startAbility(want).then((res) => {console.log(res + "");}).catch((e) => {console.log(e.code, e.message);})}
PS:如果你是模拟器用户,需要记得在被跳转的 UIAbility 中 `module.json5` 下 `exported: true` 下面添加一个配置 `visible: true`,不然得话程序会崩溃,暂时还没找到其他替代方案。 真机需要使用后才清楚

完整的文档可以参考:UIAbility组件相互交互

这里有很多跳转方式,我简单总结下

  1. 一个应用内有两个 UIAbility,可以采用此方法启动应用内的 UIAbility
  2. 同上,并获取返回结果
  3. 启动其它应用的 UIAbility,这里又分为 显示 Want 启动隐示 Want 启动,我们前面第二点提到的就是 显示 Want 启动,可以理解为精准匹配某一个 APP
  4. 同上,可以修改 Want 参数 和 module.json5 参数,进行模糊匹配,选择多个 UIAbility 可以打开
  5. Call 实现 UIAbility 交互,但是仅支持 系统应用

3.3 跳转系统应用

  1. 系统应用——拉起系统相册
  2. 拉起系统设置及二级页面

let want  = {"deviceId": "","bundleName": "","abilityName": "","uri": "","flags":wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,"action": "android.settings.SETTINGS","parameters": {},"entities": []
}
this.context.startAbility(want, (err) => {if (err.code) {// 处理业务逻辑错误console.log('startAbility failed, error.code: ' + JSON.stringify(err.code) +' error.message: ' + JSON.stringify(err.message));return;}
// 正常逻辑
})

系统设置 action 配置

系统设置常见子页面(在当前 HarmonOS 3.1 版本,4.0 版本可以使用,NEXT 版本是否支持有待考证)
Action名称 作用

android.settings.SETTINGS    跳转到设置界面
android.settings.ACCESSIBILITY_SETTINGS    跳转系统的辅助功能界面
android.settings.ADD_ACCOUNT_SETTINGS    显示添加帐户创建一个新的帐户屏幕。【测试跳转到微信登录界面】
android.settings.AIRPLANE_MODE_SETTINGS    飞行模式,无线网和网络设置界面
android.settings.WIRELESS_SETTINGS    飞行模式,无线网和网络设置界面
android.settings.APN_SETTINGS    跳转 APN设置界面
android.settings.APPLICATION_DETAILS_SETTINGS    根据包名跳转到系统自带的应用程序信息界面
android.settings.APPLICATION_DEVELOPMENT_SETTINGS    跳转开发人员选项界面
android.settings.APPLICATION_SETTINGS    跳转应用程序列表界面
android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS    跳转到应用程序界面【所有的】
android.settings.MANAGE_APPLICATIONS_SETTINGS    跳转 应用程序列表界面【已安装的】
android.settings.BLUETOOTH_SETTINGS    跳转系统的蓝牙设置界面
android.settings.DATA_ROAMING_SETTINGS    跳转到移动网络设置界面
android.settings.DATE_SETTINGS    跳转日期时间设置界面
android.settings.DEVICE_INFO_SETTINGS    跳转手机状态界面
android.settings.DISPLAY_SETTINGS    跳转手机显示界面
android.settings.INPUT_METHOD_SETTINGS    跳转语言和输入设备
android.settings.INPUT_METHOD_SUBTYPE_SETTINGS    【API 11及以上】 // 跳转 语言选择界面 【多国语言选择】
android.settings.INTERNAL_STORAGE_SETTINGS    跳转存储设置界面【内部存储】
android.settings.MEMORY_CARD_SETTINGS    跳转 存储设置 【记忆卡存储】
android.settings.LOCALE_SETTINGS    跳转语言选择界面【仅有English 和 中文两种选择】
android.settings.LOCATION_SOURCE_SETTINGS    跳转位置服务界面【管理已安装的应用程序。】
android.settings.NETWORK_OPERATOR_SETTINGS    跳转到 显示设置选择网络运营商。
android.settings.NFCSHARING_SETTINGS    显示NFC共享设置。 【API 14及以上】
android.settings.NFC_SETTINGS    显示NFC设置。这显示了用户界面,允许NFC打开或关闭。 【API 16及以上】
android.settings.PRIVACY_SETTINGS    跳转到备份和重置界面
android.settings.QUICK_LAUNCH_SETTINGS    跳转快速启动设置界面
android.search.action.SEARCH_SETTINGS    跳转到 搜索设置界面
android.settings.SECURITY_SETTINGS    跳转到安全设置界面
android.settings.SOUND_SETTINGS    跳转到声音设置界面
android.settings.SYNC_SETTINGS    跳转账户同步界面
android.settings.USER_DICTIONARY_SETTINGS    跳转用户字典界面
android.settings.WIFI_IP_SETTINGS    跳转到IP设定界面
android.settings.WIFI_SETTINGS    跳转Wifi列表设置

四、跨设备跳转【TODO】

经过尝试,两个模拟器之间貌似不支持,会提示如下错误

2-27 10:19:19.724 16971-193/com.examples.demo I 0FEFE/JsApp: startAbility failed, error.code: 16000009 error.message: "Cannot operate in wukong mode."

五、相关文档

  1. Stage模型应用组件 —— 配置
  2. 应用上下文Context
  3. codelabs 下载通知案例 —— want 应用
  4. 其它 HarmonOS 跳转案例

这篇关于HarmonyOS —— UIAbility 页面跳转总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543895

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义