HarmonyOS —— UIAbility 页面跳转总结
HarmonyOS —— UIAbility 页面跳转总结
Author:Gorit
Date:2023年12月27日
一、系统环境
- HarmonOS API9
- SDK 3.1.0
- Stage 模型
二、应用内跳转
在应用内之前实现不同 page 的跳转,我们使用 router 即可,页面跳转主要支持如下两个方法:
- router.pushUrl():目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。
- router.replaceUrl():目标页会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。
router 跳转模式
- Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。
- Single:单实例模式。即如果目标页的url在页面栈中已经存在同url页面,则离栈顶最近的同url页面会被移动到栈顶,并重新加载;如果目标页的url在页面栈中不存在同url页面,则按照标准模式跳转。
具体的使用案例 及 应用场景可以查看 官方文档,我这里就不做多余赘述
PS:在卡 ArkTS 卡片中可采用 postCardAction 实现 的跳转
三、UIAbility 之间跳转
原理:基于 startAbility 实现页面跳转,主要应用场景如下
- 打开当前 App
- 选择多个 App,选择打开某一个 App
- 打开指定 App
3.1 了解什么是 UIAbility?
概述:
UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。
UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。
更多的 UIAbility 的信息需要大家自行查阅文档~,比如 生命周期,启动方式等等
3.2 如何启动其它应用 UIAbility?
- 获取 UIAbility 上下文信息
通过文档得知,我们可以在EntryAbility中直接获取当前实例的上下文,也可以自己在任意 Page 中去获取 UIAbility 的实例信息 - 定义 Want 参数配置,这里东西有很多,我们进需要关注两个配置参数即可 (bundleName 和 abilityName)
- 调用
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);})}
完整的文档可以参考:UIAbility组件相互交互
这里有很多跳转方式,我简单总结下
- 一个应用内有两个 UIAbility,可以采用此方法启动应用内的 UIAbility
- 同上,并获取返回结果
- 启动其它应用的 UIAbility,这里又分为
显示 Want 启动和隐示 Want 启动,我们前面第二点提到的就是 显示 Want 启动,可以理解为精准匹配某一个 APP - 同上,可以修改 Want 参数 和 module.json5 参数,进行模糊匹配,选择多个 UIAbility 可以打开
- Call 实现 UIAbility 交互,但是仅支持 系统应用
3.3 跳转系统应用
- 系统应用——拉起系统相册
- 拉起系统设置及二级页面
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."
五、相关文档
- Stage模型应用组件 —— 配置
- 应用上下文Context
- codelabs 下载通知案例 —— want 应用
- 其它 HarmonOS 跳转案例
相关文章:
HarmonyOS —— UIAbility 页面跳转总结
HarmonyOS —— UIAbility 页面跳转总结 Author:Gorit Date:2023年12月27日 一、系统环境 HarmonOS API9SDK 3.1.0Stage 模型 二、应用内跳转 在应用内之前实现不同 page 的跳转,我们使用 router 即可,页面跳转主要支持如下…...
Spring Boot 3 集成 Jasypt详解
随着信息安全的日益受到重视,加密敏感数据在应用程序中变得越来越重要。Jasypt(Java Simplified Encryption)作为一个简化Java应用程序中数据加密的工具,为开发者提供了一种便捷而灵活的加密解决方案。本文将深入解析Jasypt的工作…...
Spring Boot整合 EasyExcel 实现复杂 Excel 表格的导入与导出功能
文章目录 1. 简介2. 引入依赖3. 导入功能实现3.1 创建实体类3.2 编写导入 Controller3.3 编写导入页面 4. 导出功能实现4.1 编写导出 Controller4.2 编写导出页面 5. 启动应用 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 &…...
SQLSERVER排查CPU占用高
操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 现象 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用不太高,只占用了30个G CPU…...
uniapp:富文本回显
一、使用uniapp官方的标签 rich-text: 会出现图片无法显示的问题,可以用以下方法来过滤处理 <rich-text :nodes"question.title | formatRichHtml"></rich-text> formatRichHtml(html) {if (!html) {return html;}//控制小程序…...
flink内存配置
flink内存配置 配置 TaskManager 内存 | Apache Flink...
easyexcel 导出
在使用EasyExcel库进行数据写入时,通常我们会使用实体类来存储数据。但是当遇到动态查询,无法确定属性数量和名称时,就需要使用Map来接收数据。然而,直接将Map中的数据写入Excel表格并不是一件简单的事情。接下来,我将…...
maven命令行安装依赖测试
mvn dependency:get -DgroupIdorg.springframework -DartifactIdspring-core -Dversion5.3.9作用:可用于测试配置环境变量后,能否下载依赖到本地仓库...
Redis 笔记
文章目录 安装 & 启动杂乱String字符串 key-valueList 有序重复列表Set 无序不重复列表SortedSet 有序集合Hash 哈希Stream 轻量级消息队列订阅模式 学习地址:https://www.bilibili.com/video/BV1Jj411D7oG/ 安装 & 启动 安装包地址: https://g…...
可穿戴智能设备应用领域以及使用意义分别有哪些?
可穿戴智能设备有哪些? 可穿戴智能设备是指可以佩戴在身上,具有智能功能和交互能力的电子设备。以下是一些常见的可穿戴智能设备: 智能手表:智能手表结合了传统手表的功能和智能设备的特性,可以显示时间、接收通知、监…...
【Linux操作系统】探秘Linux奥秘:文件系统的管理与使用
🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS &…...
机器学习——主成分分析(PCA)
主成分分析(Principal Component Analysis,简称PCA)是一种常用的无监督学习算法,用于降维和数据可视化。主要目标是将高维数据转换成低维空间,同时尽可能保留原始数据的信息。 PCA的主要思想是通过线性变换将原始数据…...
论最近热门的AI绘画技术—从小白绘画到文创手账设计【文末送书-13】
文章目录 🏀前言⚽AI绘图技术栈⚾️简单的代码实现案例🏈iPad萌系简笔画:从小白绘画到文创手账设计【文末送书-13】⛳粉丝福利:文末推荐与福利免费包邮送书! 🏀前言 AI绘画技术,也称为人工智能…...
python打开文件的方式比较
open(addr,w) 打开之后文件无论以前有什么,打开后都要清空 /// open(addr,r) 文件打开后,不删除以前内容...
使用Jenkins和单个模板部署多个Kubernetes组件
前言 在持续集成和部署中,我们通常需要部署多个实例或组件到Kubernetes集群中。通过Jenkins的管道脚本,我们可以自动化这个过程。在本文中,我将演示如何使用Jenkins Pipeline及单个YAML模板文件(.tpl)来部署多个类似的…...
Unity Meta Quest 一体机开发(十二):【手势追踪】Poke 交互 - 用手指点击由 3D 物体制作的 UI 按钮
文章目录 📕教程说明📕给玩家配置 HandPokeInteractor📕用 3D 物体制作可以被点击的 UI 按钮⭐搭建物体层级⭐给物体添加脚本⭐为脚本变量赋值 📕模仿官方样例按钮的样式📕在按钮上添加文字📕修改按钮图片 …...
Vue 3 中安装并使用 Axios 详细步骤+样例代码详解
axios详细步骤 在集成终端打开,使用 npm 或 yarn 安装 Axios: npm install axios或 yarn add axios这将在您的项目中安装 Axios。 在您的 Vue 3 项目中创建一个用于发送 HTTP 请求的模块或文件,比如 http.js。 在 http.js 文件中导入 Axios…...
IDEA 控制台中文出现乱码问题解决
一、问题概述 请看下图 二、问题分析 IDEA控制台输出乱码一般会有三种来源: ① IDEA本身编码错误 ② Tomcat日志输出编码错误 ③ 项目本身原因。 终极原因:IDEA编码和Tomcat编码不一致,统一设置为UTF-8即可。 三、解决思路 修改…...
计算机网络(1)
计算机网络(1) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网(1)因特网概念解读服务常见的服务 协议网络边缘特点强调 网络核心特点强调 小程一言 我的计算机网络专栏,是自己在计算机网络…...
如果我想用python自动操作手机、电脑软件,应该学python哪方面的知识呢?
Python 作为一门万能语言,在各方面的表现都非常好 如果我们想使用 Python 来操作手机和电脑,那么需要学习掌握如下几个方面的知识 1. 基本的Python编程 显而易见,你需要学习Python的基本语法、数据类型、控制流和函数等基本概念。这是后面…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
