『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中设置在应用启动后设置快捷方式
  1. onLaunch: 这个方法在应用启动时调用,主要用于设置应用的初始化逻辑。
    平台判断: 首先判断当前运行平台是否为 Android。只有在 Android 平台下,才会执行接下来的逻辑。
    添加快捷方式: 使用 addShortcuts 方法为应用添加两个快捷方式(扫码和用户),并为它们设置图标和跳转路径。这里使用了 plus.io.convertLocalFileSystemURL 将本地图片路径转换为平台绝对路径,以确保在 Android 上正确引用。
  2. 参数处理
    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』 专栏,持续更新中
『未完待续』


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

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

相关文章

PHP 垃圾回收高级特性

PHP 垃圾回收高级特性 1. 循环引用与内存泄漏 单纯的引用计数在遇到循环引用时会导致内存泄漏&#xff0c;主要原因是引用计数无法正确识别那些仅通过循环引用相互关联但实际上已经不可达的对象。 1.1 引用计数的基本原理 引用计数是一种内存管理机制&#xff0c;通过维护每…

奈雪小程序任务脚本

功能概述 该脚本用于自动完成奈雪点单小程序的每日任务&#xff0c;包括&#xff1a; 自动检测 Token 有效性自动签到&#xff08;如果未签到&#xff09;获取用户基础信息&#xff08;昵称、手机号&#xff09;查询当前奈雪币余额记录连续签到天数支持多账号执行&#xff0c…

基于cornerstone3D的dicom影像浏览器 第二十七章 设置vr相机,复位视图

文章目录 前言一、VR视图设置相机位置1. 相机位置参数2. 修改mprvr.js3. 调用流程1) 修改Toolbar3D.vue2) 修改View3d.vue3) 修改DisplayerArea3D.vue 二、所有视图复位1.复位流程说明2. 调用流程1) Toolbar3D中添加"复位"按钮&#xff0c;发送reset事件2) View3d.vu…

Opencv4 c++ 自用笔记 03 滑动条、相机与视频操作

1. 相机与视频操作 1.1 打开视频&#xff0f;相机 OpenCV 中 imread() 只能读取静态图像&#xff0c;若要读取视频文件或摄像头流&#xff0c;需要使用 VideoCapture 类&#xff1a; // 构造函数 cv::VideoCapture::VideoCapture(); cv::VideoCapture…

身份证发给别人怎么加水印?赛文奥特曼身份证添加水印教程

我们经常需要使用身份证照片进行身份验证、资料提交等操作。然而&#xff0c;直接将身份证照片发送给他人或上传到网络存在一定的信息泄露风险。为了更好地保护个人隐私&#xff0c;我们可以使用 简鹿水印助手 这款工具&#xff0c;在身份证照片上添加专属水印&#xff0c;从而…

十、【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战

【核心功能篇】项目与模块管理&#xff1a;前端页面开发与后端 API 联调实战 前言准备工作第一部分&#xff1a;完善项目管理功能 (Project)1. 创建/编辑项目的表单对话框组件 第二部分&#xff1a;模块管理功能 (集成到项目详情页)1. 创建模块相关的 API 服务 (src/api/module…

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求&#xff0c;我们系统有份数据被…

Axure设计案例——科技感立体柱状图

想让你的数据展示告别平淡无奇&#xff0c;成为吸引全场目光的焦点吗&#xff1f;快来瞧瞧这个Axure设计的科技感立体柱状图案例&#xff01;科技感设计风格借助逼真的立体效果打破传统柱状图的平面感&#xff0c;营造出一种令人眼前一亮的视觉震撼。每一个柱状体都仿佛是真实存…

恶意npm与VS Code包窃取数据及加密货币资产

60个npm包窃取系统敏感信息 安全研究人员在npm软件包注册表中发现60个恶意组件&#xff0c;这些组件能够收集主机名、IP地址、DNS服务器和用户目录信息&#xff0c;并将其发送至Discord平台控制的终端节点。据Socket安全研究员Kirill Boychenko上周发布的报告显示&#xff0c;…

leetcode 2359. 找到离给定两个节点最近的节点

给你一个 n 个节点的 有向图 &#xff0c;节点编号为 0 到 n - 1 &#xff0c;每个节点 至多 有一条出边。 有向图用大小为 n 下标从 0 开始的数组 edges 表示&#xff0c;表示节点 i 有一条有向边指向 edges[i] 。如果节点 i 没有出边&#xff0c;那么 edges[i] -1 。 同时…

1. pytorch手写数字预测

1. pytorch手写数字预测 1.背景2.准备数据集2.定义模型3.dataloader和训练4.训练模型5.测试模型6.保存模型 1.背景 因为自身的研究方向是多模态目标跟踪&#xff0c;突然对其他的视觉方向产生了兴趣&#xff0c;所以心血来潮的回到最经典的视觉任务手写数字预测上来&#xff0…

AWS WebRTC:获取ICE服务地址(part 2): ICE Agent的作用

上一篇&#xff0c;已经获取到了ICE服务地址&#xff0c;从返回结果中看&#xff0c;是两组TURN服务地址。 拿到这些地址有什么用呢&#xff1f;接下来就要说到WebRTC中ICE Agent的作用了&#xff0c;返回的服务地址会传给WebRTC最终给到ICE Agent。 ICE Agent的作用&#xf…

大数据时代的利剑:Bright Data网页抓取与自动化工具共建高效数据采集新生态

目录 一、为何要选用Bright Data网页自动化抓取——帮助我们高效高质解决以下问题&#xff01; 二、Bright Data网页抓取工具 - 网页爬虫工具实测 2.1 首先注册用户 2.2 首先点击 Proxies & Scraping &#xff0c;再点击浏览器API的开始使用 2.3 填写通道名称&#xff…

指纹识别+精准化POC攻击

开发目的 解决漏洞扫描器的痛点 第一就是扫描量太大&#xff0c;对一个站点扫描了大量的无用 POC&#xff0c;浪费时间 指纹识别后还需要根据对应的指纹去进行 payload 扫描&#xff0c;非常的麻烦 开发思路 我们的思路分为大体分为指纹POC扫描 所以思路大概从这几个方面…

【Day40】

DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#x…

【HTML-13】HTML表格合并技术详解:打造专业数据展示

表格是HTML中展示结构化数据的重要元素&#xff0c;而表格合并则是提升表格表现力的关键技术。本文将全面介绍HTML中的表格合并方法&#xff0c;帮助您创建更专业、更灵活的数据展示界面。 1. 表格合并基础概念 在HTML中&#xff0c;表格合并主要通过两个属性实现&#xff1a…

<uniapp><threejs>在uniapp中,怎么使用threejs来显示3D图形?

前言 本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统:windows 平台:visual studio code、HBuilderX(uniapp开…

如何制作全景VR图?

全景VR图&#xff0c;特别是720度全景VR&#xff0c;为观众提供一种沉浸式体验。 全景VR图能够捕捉场景的全貌&#xff0c;还能将多个角度的图片或视频无缝拼接成一个完整的全景视角&#xff0c;让观众在虚拟环境中自由探索。随着虚拟现实&#xff08;VR&#xff09;技术的飞速…

前端使用qrcode来生成二维码的时候中间添加logo图标

这个开源仓库可以让你在前端页面中生成二维码图片&#xff0c;并且支持调整前景色和背景色&#xff0c;但是有个问题&#xff0c;就是不能添加logo图片。issue&#xff1a; GitHub Where software is built 但是已经有解决方案了&#xff1a; add a logo picture Issue #21…

【C语言】函数指针及其应用

目录 1.1 函数指针的概念和应用 1.2 赋值与内存模型 1.3 调用方式与注意事项 二、函数指针的使用 2.1 函数指针的定义和访问 2.2 动态调度&#xff1a;用户输入驱动函数执行 2.3 函数指针数组进阶应用 2.4 函数作为参数的高阶抽象 三、回调函数 3.1 指针函数…