『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
目录
- 手机环境适配说明
- 安卓
- 效果图
- 代码
- iOS(暂未实测,没有水果开发者)
- 总结
欢迎关注 『uniapp』 专栏,持续更新中
欢迎关注 『uniapp』 专栏,持续更新中
手机环境适配说明
个别手机系统可能需要进行特别的权限设置,否则会无法使用 桌面快捷方式:
已知的有:
- vivo系统的手机可能需要在"设置"->“后台弹出界面权限”
vivo s10 Pro 实测 安卓11
安卓
安卓应用启动过一次后才会添加快捷方式
效果图
代码
思路快捷方式跳转的时候会传递参数到plus.runtime.arguments中onshow的时候分析这个参数并跳转,后期可以试着不用uni.navigateTo 可以改用别的跳转方式.
- 在项目根目录新建文件utils/shortcuts.js,内容如下
const Build = plus.android.importClass("android.os.Build");function addShortcuts(main, shortcuts) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {const shortcutManager = main.getSystemService(plus.android.getAttribute( main, 'SHORTCUT_SERVICE' ));try {const shortcutInfoList = plus.android.newObject('java.util.ArrayList');shortcuts.forEach((item) => {const intent = plus.android.newObject('android.content.Intent', 'io.dcloud.PandoraEntry');plus.android.invoke(intent, 'setClassName', main, "io.dcloud.PandoraEntryActivity");plus.android.invoke(intent, 'setFlags', plus.android.getAttribute(intent, 'FLAG_ACTIVITY_NEW_TASK'));plus.android.invoke(intent, 'putExtra', 'path', item.path);const shortcut = plus.android.newObject( "android.content.pm.ShortcutInfo$Builder", main, item.id);const bitmap = plus.android.invoke('android.graphics.BitmapFactory', 'decodeFile', item.icon);const icon = plus.android.invoke('android.graphics.drawable.Icon', 'createWithBitmap', bitmap);plus.android.invoke(shortcut, 'setShortLabel', item.shortLabel || item.title);plus.android.invoke(shortcut, 'setLongLabel', item.title);plus.android.invoke(shortcut, 'setIntent', intent);plus.android.invoke(shortcut, 'setIcon', icon);plus.android.invoke(shortcutInfoList, 'add', plus.android.invoke(shortcut, 'build'));})return plus.android.invoke(shortcutManager, 'setDynamicShortcuts', shortcutInfoList);} catch (e) {console.log(e);return false;}}return false;
}function removeAll(main) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {const shortcutManager = main.getSystemService(plus.android.getAttribute( main, 'SHORTCUT_SERVICE' ));return plus.android.invoke(shortcutManager, 'removeAllDynamicShortcuts');}
}export { addShortcuts, removeAll };
- app.vue中设置在应用启动后设置快捷方式
- onLaunch: 这个方法在应用启动时调用,主要用于设置应用的初始化逻辑。
平台判断: 首先判断当前运行平台是否为 Android。只有在 Android 平台下,才会执行接下来的逻辑。
添加快捷方式: 使用 addShortcuts 方法为应用添加两个快捷方式(扫码和用户),并为它们设置图标和跳转路径。这里使用了 plus.io.convertLocalFileSystemURL 将本地图片路径转换为平台绝对路径,以确保在 Android 上正确引用。 - 参数处理
onShow: 这个方法在应用从后台恢复到前台时调用,主要处理应用接收到的参数。
参数获取: 使用 plus.runtime.arguments 获取应用启动时传入的参数。
参数解析: 尝试将获取的参数解析为 JSON 对象。如果解析成功且对象中包含 path 属性,则调用 uni.navigateTo 方法进行页面跳转。
错误处理: 如果解析参数时发生错误,捕获并输出错误信息,便于调试。
参数清理: 最后,在 finally 块中将 plus.runtime.arguments 清空,防止再次使用相同的参数。
<script>// js h5+ 模式创建import { addShortcuts } from '@/utils/shortcuts.js'export default {onLaunch: function() {console.log('App Launch')if (uni.getSystemInfoSync().platform === 'android') {this.main = plus.android.runtimeMainActivity();// js h5+ 模式创建let res = addShortcuts(this.main, [{id: 'scan',icon: plus.io.convertLocalFileSystemURL('/static/scan.png'), //本地图片,要使用平台绝对路径path: '/pages/index/index',shortLabel: '',title: '扫码'},{id: 'user',icon: plus.io.convertLocalFileSystemURL('/static/qq.png'), //本地图片,要使用平台绝对路径path: '/pages/index/user',shortLabel: '',title: '用户'},]);}},onShow: function() {console.log('App Show')var args = plus.runtime.arguments;if (args) {console.log('args:', args);try {const parsedArgs = JSON.parse(args);if (parsedArgs.path) {uni.navigateTo({url: parsedArgs.path});}} catch (e) {console.warn('解析参数时发生错误:', e);} finally {// 使用过参数后要清空,因为扫码算从外部启动应用也会接收参数plus.runtime.arguments = "";}}},onHide: function() {console.log('App Hide')}}
</script><style>/*每个页面公共css */
</style>
随便新建一个user和index的页面在pages文件夹下即可测试
iOS(暂未实测,没有水果开发者)
manifest.json 设置iOS
/* 5+App特有相关 */
"app-plus": {"distribute": {/* ios打包配置 */"ios": {"shortcuts": [{"type": "scan","title": "扫一扫","subtitle": "","iconfile": "/static/images/scan_light.png","userinfo": {"key": "/pages/index/index"}}],},},},
总结
大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2024 mzh
Crated:2024-4-1
欢迎关注 『uniapp』 专栏,持续更新中
欢迎关注 『uniapp』 专栏,持续更新中
『未完待续』
相关文章:

『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
目录 手机环境适配说明安卓效果图代码 iOS(暂未实测,没有水果开发者)总结 欢迎关注 『uniapp』 专栏,持续更新中 欢迎关注 『uniapp』 专栏,持续更新中 手机环境适配说明 个别手机系统可能需要进行特别的权限设置,否则会无法使用 桌面快捷方式: 已知的有…...

【LLM vs Agent】从语言模型到智能体,人工智能迈出的关键一步
目录 一、什么是 LLM?语言的天才,思维的起点 ✅ 特点小结: 二、什么是 Agent?智能的执行者,自主的决策者 ✅ 特点小结: 三、LLM 与 Agent 的关系:是工具,更是大脑 四、案例实战…...
【看到哪里写到哪里】C的指针-3(函数指针)
//定义四个函数 加减乘数 int add(int a, int b) {return a b; } int subtract(int a, int b) {return a - b; } int multiply(int a, int b) {return a * b; } int divide(int a, int b) {if (b 0){printf("Error: devision by ZERO!");return 0;}return a / b; }…...

麦克风和电脑内播放声音实时识别转文字软件FunASR整合包V5下载
我基于FunASR制作的实时语音识别转文字软件当前更新到V5版本。软件可以实时识别麦克风声音和电脑内播放声音转为文字。 FunASR软件介绍 FunASR 是一款基础语音识别工具包和开源 SOTA 预训练模型,支持语音识别、语音活动检测、文本后处理等。 我使用FunASR制作了一…...

PyTorch——卷积层(3)
conv_arithmetic/README.md at master vdumoulin/conv_arithmetic GitHub out_channel1 out_channel2...
(面试)OkHttp实现原理
OkHttp 是一个高效的 HTTP 客户端,被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性,例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理: 1…...

从 PyTorch 到 TensorFlow Lite:模型训练与推理
一、方案介绍 研发阶段:利用 PyTorch 的动态图特性进行快速原型验证,快速迭代模型设计。 灵活性与易用性:PyTorch 是一个非常灵活且易于使用的深度学习框架,特别适合研究和实验。其动态计算图特性使得模型的构建和调试变得更加直…...
C++ 17 正则表达式
正则表达式不是C语言的一部分,这里仅做简单的介绍。 将这项技术引进,在 』的讨论 正则表达式描述了一种字符串匹配的模式。一般使用正则表达式主要是实现下面三个需求: 1,检查一个串是否包含某种形式的子串; 2,将匹配的子串替换&a…...

【存储基础】存储设备和服务器的关系和区别
文章目录 1. 存储设备和服务器的区别2. 客户端访问数据路径场景1:经过服务器处理场景2:客户端直连 3. 服务器作为"中转站"的作用 刚开始接触存储的时候,以为数据都是存放在服务器上的,服务器和存储设备是一个东西&#…...
kernel内核和driver驱动的区别
“kernel”和“driver”虽然都跟操作系统和硬件有关,但它们指的是不同的东西。 1. Kernel(内核) 定义:操作系统的核心组件,是操作系统中负责管理系统资源和硬件的最底层软件。 职责: 管理CPU调度ÿ…...

5.29打卡
浙大疏锦行 DAY 38 Dataset和Dataloader类 知识点回顾: 1. Dataset类的__getitem__和__len__方法(本质是python的特殊方法) 2. Dataloader类 3. minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图…...

【黑马程序员uniapp】项目配置、请求函数封装
黑马程序员前端项目uniapp小兔鲜儿微信小程序项目视频教程,基于Vue3TsPiniauni-app的最新组合技术栈开发的电商业务全流程_哔哩哔哩_bilibili 参考 有代码,还有app、h5页面、小程序的演示 小兔鲜儿-vue3ts-uniapp-一套代码多端部署: 小兔鲜儿-vue3ts-un…...
ios tableview吸顶
由于项目需要实现一个上滑吸顶的效果,网上也看到有很多种方式实现,但是如果加上下拉刷新的功能会导致界面异常,还有第三方库实现方式库,太繁琐了,下面是我的实现方式,效果如下: tablevie滑动吸顶…...

PyTorch——DataLoader的使用
batch_size, drop_last 的用法 shuffle shuffleTrue 各批次训练的图像不一样 shuffleFalse 在第156step顺序一致...
【Python 进阶2】抽象方法和实例调用方法
抽象方法和实例调用方法 对比表格: 特性抽象方法 (forward)实例调用方法 (call)定义方式abc.abstractmethod 装饰器特殊方法名 __call__调用方式不能直接调用,必须通过子类实现可以直接调用对象:controller(attn, ...)实现要求必须由子类实…...
第1章:走进Golang
第1章:走进Golang 一、Golang简介 Go语言(又称Golang)是由Google的Robert Griesemer、Rob Pike及Ken Thompson开发的一种开源编程语言。它诞生于2007年,2009年11月正式开源。Go语言的设计初衷是为了在不损失应用程序性能的情况下…...

Predixy的docker化
概述 当前已有一套redis cluster的集群,但是fs中的hiredis只能配置单实例redis。 AI了一下方案,可以使用redis的proxy组件来实现从hiredis到redis cluster的互通。 代码地址:https://github.com/joyieldInc/predixy Predixy特性介绍&…...

C++ 之 多态 【虚函数表、多态的原理、动态绑定与静态绑定】
目录 前言 1.多态的原理 1.1虚函数表 1.2派生类中的虚表 1.3虚函数、虚表存放位置 1.4多态的原理 1.5多态条件的思考 2.动态绑定与静态绑定 3.单继承和虚继承中的虚函数表 3.1单继承中的虚函数表 3.2多继承(非菱形继承)中的虚函数表 4.问答题 前言 需要声明的&#x…...

【JavaWeb】Maven、Servlet、cookie/session
目录 5. Maven6. Servlet6.1 Servlet 简介6.2 HelloServlet6.3 Servlet原理6.4 Mapping( **<font style"color:rgb(44, 44, 54);">映射 ** )问题6.5 ServletContext6.6 HttpServletResponse<font style"color:rgb(232, 62, 140);background-color:rgb(…...
[蓝桥杯]阶乘求值【省模拟赛】
问题描述 给定 nn,求 n!n! 除以 10000000071000000007 的余数。 其中 n!n! 表示 nn 的阶乘,值为从 11 连乘到 nn 的积,即 n!123…nn!123…n。 输入格式 输入一行包含一个整数 nn。 输出格式 输出一行,包含一个整数ÿ…...
鸿蒙OSUniApp微服务架构实践:从设计到鸿蒙部署#三方框架 #Uniapp
UniApp微服务架构实践:从设计到鸿蒙部署 引言 在最近的一个大型跨平台项目中,我们面临着一个有趣的挑战:如何在UniApp框架下构建一个可扩展的微服务架构,并确保其在包括鸿蒙在内的多个操作系统上流畅运行。本文将分享我们的实践…...

Rust 编程实现猜数字游戏
文章目录 编程实现猜数字游戏游戏规则创建新项目默认代码处理用户输入代码解析 生成随机数添加依赖生成逻辑 比较猜测值与目标值类型转换 循环与错误处理优化添加循环优雅处理非法输入 最终完整代码核心概念总结 编程实现猜数字游戏 我们使用cargo和rust实现一个经典编程练习…...

关于神经网络中的激活函数
这篇博客主要介绍一下神经网络中的激活函数以及为什么要存在激活函数。 首先,我先做一个简单的类比:激活函数的作用就像给神经网络里的 “数字信号” 加了一个 “智能阀门”,让机器能学会像人类一样思考复杂问题。 没有激活i函数的神经网络…...

CentOS_7.9 2U物理服务器上部署系统简易操作步骤
近期单位网站革新,鉴于安全加固,计划将原有Windows环境更新到Linux-CentOS 7.9,这版本也没的说(绝)了(版)官方停止更新,但无论如何还是被sisi的牵挂着这一大批人,毕竟从接…...
第十三篇:MySQL 运维自动化与可观测性建设实践指南
本篇重点介绍 MySQL 运维自动化的关键工具与流程,深入实践如何构建高效可观测体系,实现数据库系统的持续稳定运行与故障快速响应。 一、为什么需要 MySQL 运维自动化与可观测性? 运维挑战: 手动备份容易遗漏或失败; …...

短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例
摘要 本文以抖音与快手两大短视频平台为研究对象,从用户群体、内容生态、推荐逻辑三维度分析其差异化特征,并探讨开源AI智能名片链动21模式与S2B2C商城小程序在平台适配中的创新价值。研究发现,抖音的流量中心化机制与优质内容导向适合品牌化…...
HTTP 如何升级成 HTTPS
有一个自己的项目需要上线,域名解析完成后,发现只能使用 http 协议,这在浏览器上会限制,提示用户不安全,所以需要把 HTTP 升级成 HTTPS 协议,但又不想花钱。 前提条件: 已经配置好 Nginx 服务器…...

【笔记】Windows 下载并安装 ChromeDriver
以下是 在 Windows 上下载并安装 ChromeDriver 的笔记: ✅ Windows 下载并安装 ChromeDriver 1️⃣ 确认 Chrome 浏览器版本 打开 Chrome 浏览器 点击右上角 ︙ → 帮助 → 关于 Google Chrome 记下版本号,例如:114.0.5735.199 2️⃣ 下载…...

Spark-Core Project
RDD转换算子总结 RDD转换算子分为Value类型、双Value类型和Key - Value类型。 1、Value类型 map:对数据逐条映射转换,可改变数据类型或值。如 dataRDD.map(num > num * 2 运行结果: 2)mapPartitions:以分区为单位处…...
SQL 中的 `CASE WHEN` 如何使用?
✅ SQL 中的 CASE WHEN 如何使用? 一、CASE WHEN 是什么? CASE WHEN 是 SQL 中用于实现 条件判断 的表达式,功能类似于 if-else 或 switch-case,可用于 SELECT、WHERE、ORDER BY 等子句中。 go专栏:https://duoke360.com/tutorial/path/golang 二、语法格式 1. 简单 C…...