Android App Shortcuts

article/2025/8/17 19:04:41

周五了,周末还远吗?~

加入我知识星球的人都得到了提升,可不要错过哦~ 点击阅读原文即可。

本文较长,阅读大约十分钟 ~

我们都知道iPhone6S推出了3D Touch的功能,也算是一个大卖点,Google也后来居上,在API25推出了App Shortcuts,按照官方的介绍:作为一名开发人员,您可以定义快捷键来执行特定操作在你的应用程序。这些快捷键可以显示在一个Launcher上 ,帮助用户快速开始共同支持在应用程序或推荐任务。

 

其实说白了就是长按显示菜单快捷进入某一个界面或者功能,而不用先打开App找到该板块,如图:

       640?wx_fmt=png      

 

不过要注意的是,只有处理主要活动,也就是ACTION_MAIN和CATEGORY_LAUNCHER标签才能使用App Shortcuts

 

App Shortcuts 支持静态和动态添加:

 

静态快捷方式是在打包到APK或app包中的资源文件中定义的。

动态快捷方式只能在运行时发布、更新和删除。

如果用户授予权限,可以在运行时将固定快捷方式添加到受支持的启动程序中。

 

不过App Shortcuts也有一定的局限性,虽然您可以为您的应用程序一次发布最多五个快捷方式(静态和动态快捷方式的组合),但大多数启动程序只能显示四个快捷方式。

 

然而,用户可以创建的固定快捷方式的数量没有限制。即使你的应用程序不能删除固定的快捷方式,它仍然可以禁用它们。

 

并且要注意的是,Launcher是可以访问这些App Shortcuts的数据的,所以关于用户隐私的数据记得隐藏。

一.创建Shortcuts

静态Shortcuts最适合在用户与应用程序交互的整个过程中使用一致结构链接到内容的应用程序。因为大多数启动程序一次只能显示四个快捷方式,所以静态快捷方式对于常见的活动非常有用。例如,如果用户希望以特定的方式查看日历或电子邮件,使用静态快捷方式可以确保他们执行常规任务的经验是一致的。

 

动态Shortcuts用于上下文敏感的应用程序中的操作。例如,如果您构建的游戏允许用户在启动时从当前级别开始,则需要经常更新快捷方式。使用动态快捷方式允许每次用户清除级别时更新快捷方式。

 

固定Shortcuts用于特定的、用户驱动的操作。例如,用户可能希望将特定的网站固定到启动程序上。这是有益的,因为它允许用户执行自定义操作,例如一步导航到网站,比使用浏览器的默认实例更快。

1.静态创建Shortcuts

1.在AndroidManifest.xml文件中找到启动项

2.添加meta-data属性,如图:

       640?wx_fmt=png      

3.创建资源文件:res/xml/shortcuts.xml

       640?wx_fmt=png      

如图所示的配置文件,每一个<shortcut>标签代表一个菜单,我们来看下他的属性含义:

 

  • enabled:是否可见

  • icon:图标

  • shortcutDisabledMessage:禁用的消息

  • shortcutId:id,代码中找到

  • shortcutLongLabel:长按标签

  • shortcutShortLabel:短按标签

  • Intent:意图

    • targetClass:目标类

    • targetPackage:自身类

    • action:响应

可以看出,基本的一些属性配置,结合intent去跳转,我们运行看下效果:

 

       640?wx_fmt=png      

 

可以看到显示效果还是不错的,显示的是长按的Lable

 

其中android:shortcutId和android:shortcutShortLabel是必填的,其他都是可选择的,并且这三个字符串的属性都必须定义在strings.xml下,不能直接填写。

 

好的,我们接着来看动态

2.动态创建Shortcuts

动态创建使用的类是ShortcutManager,他的几个关键的方法如下:

  • setDynamicShortcuts() :重新定义整个动态快捷方式列表

  • addDynamicShortcuts():添加快捷列表

  • updateShortcuts() :更新快捷列表

  • removeDynamicShortcuts():删除一组快捷方式

  • removeAllDynamicShortcuts():删除全部快捷方式

       640?wx_fmt=png      

 这是一个动态创建的示例,我们来分析下代码,首先我们通过getSystemService的方式拿到ShortcutManager,ShortcutManager实例必须通过这种getSystemService方式来获取,获取到之后我定义了一个Intent作为等下使用到的跳转,记得一定要添加Action,否则会报错,紧接着可以看到我们创建ShortcutInfo,每一个ShortcutInfo代表一个快捷菜单,最后使用setDynamicShortcuts去创建显示,而ShortcutInfo中就是这几个刚才说过的参数了。来看下预览:

       640?wx_fmt=png      

3.创建固定Shortcuts

在Android 8.0 (API级别26)及更高版本上,您可以创建固定的快捷方式。与静态和动态快捷方式不同,固定快捷方式在受支持的启动程序中显示为单独的图标.

 

       640?wx_fmt=png      

创建固定的快捷方式会有用户请求对话框,如果用户不同意则无法创建,我们来看下步骤:

 

1.判断设备是否支持创建固定快捷方式,使用isRequestPinShortcutSupported,这个方法位于ShortcutManager类中。

2.判断固定快捷方式是否已存在,如果存在,创建一个ShortcutInfo对象,该对象只包含现有快捷方式的ID即可,系统会自动从Shortcuts中查找此快捷方式,如果没有,则按照刚才动态创建Shortcuts一样创建一个ShortcutInfo对象

3.通过调用requestPinShortcut()将快捷方式固定到设备的启动程序。在此过程中,您可以传入PendingIntent对象,该对象仅在快捷方式被成功固定时通知应用程序,如果用户不允许将快捷方式固定到启动程序,则应用程序不会收到回调。

 

我们来看下代码:

       640?wx_fmt=png      

首先我们判断是否支持,然后就创建ShortcutInfo,因为我们刚才已经创建了快捷方式,现在只需要传递一个id即可,接着我们创建一个PendingIntent作为创建固定快捷方式成功后的通知,接着我们通过requestPinShortcut来创建,当然,你也可以不要这个PendingIntent,此时,我们就可以运行了

       640?wx_fmt=png      

从运行的图中可以看出,系统提示用户是否显示,点击添加,则在桌面创建图标,图标右下角还有一个小图标,而他显示的Label是我们ShortcutInfo的ShortLabel

4.自定义创建Shortcuts通知

我们创建的固定快捷方式的时候系统会有弹框提示,这个框我们是可以自定义的,让UI更加协调。

       640?wx_fmt=png      

 

首先在你的启动标签里添加<intent-filter>标签内容为ACTION_CREATE_SHORTCUT

 

  1. The system starts your app's specialized activity.

  2. The user sets options for the shortcut.

  3. The user selects the confirmation button.

  4. Yourapp creates the shortcut using the createShortcutResultIntent() method. This method returns an Intent, which your app relays back to the previously-executing activity using setResult().

  5. Your app calls finish() on the activity used to create the customized shortcut.

这种意义不大,没细看。

二.管理Shortcuts

1.可见性

创建好了Shortcuts之后,我们还需要在整个生命周期中去管理这些快捷方式,先说一下固定的快捷方式,因为固定快捷方式出现在启动程序本身,所以它们总是可见的。固定快捷方式只有在以下情况下才会从启动程序中删除:

 

1.用户删除它。

2.与快捷方式关联的应用程序被卸载。

3.用户可以通过设置> Apps & notifications,选择一个应用程序,然后按下Storage > Clear Storage来清除应用程序的数据。

 

       640?wx_fmt=png      

2.显示顺序

判断这个快捷方式是静态还是动态的,可以通过构建一个ShortcutInfo后调用如下方法:

 

静态快捷方式:快捷方式的isDeclaredInManifest()方法返回true。

动态快捷方式:快捷方式的ShortcutInfo.isDynamic()方法返回true。

 

在每一种快捷方式类型(静态和动态)中,快捷方式都按照ShortcutInfo.getRank()的递增顺序排序。当你update,set,add 快捷方式的时候都会更新Rank。

 

Rank的顺序是自动调整的,所以它们对于每种快捷方式(静态或动态)都是唯一的。例如,如果有三个级别为0、1和2的动态快捷方式,则添加另一个级别为1的动态快捷方式表示将该快捷方式放在第二个位置的请求。作为回应,第三和第四个快捷方式将移到快捷方式列表的底部,它们的排名将分别更改为2和3。

3.管理多种意图和活动

只需要在构建ShortcutInfo的时候将setIntent改成setIntents即可。

 

要注意的是:当用户选择一个快捷方式,然后按下back键,应用程序就会启动与资源文件中列出的快捷方式倒数第二个意图相对应的活动。这种行为模式在重复按后退按钮时继续,直到用户清除快捷方式创建的后退堆栈为止。当用户下一次按下后退按钮时,系统会将它们导航回启动程序。

 

后面的还有挺多的小细节,不常用,有兴趣可以自行查阅:

https://developer.android.google.cn/guide/topics/ui/shortcuts/managing-shortcuts

 

官方给出的Github示例代码:

https://github.com/googlesamples/android-AppShortcuts/#readme

 

有兴趣的可以加群:417046685 ,划水闲聊加扯蛋~

有兴趣的可以加入我的知识星球哦,只要点击阅读原文即可哦~

关于知识星球的介绍可以在公众号点击右下角的【和我学习】或者公众号发送【Hi Android】【知识星球】都可以


http://chatgpt.dhexx.cn/article/vqIK5JRS.shtml

相关文章

Linux下cut命令用法详解

Linux下cut命令用法详解 原创&#xff1a;frozen_sucker(冰棍) 有时我们经常会遇到这样一些问题&#xff1a;有一页电话号码薄&#xff0c;上面按顺序规则地写着人名、家庭住址、电话、备注等&#xff0c;此时我们只想取出所有人的名字和其对应的电话号码&#xff0c;你有几种…

使用Dynamic Shortcuts

在看完Static Shortcuts后, 我们不相信Google仅仅给我们开发者开放了局限性如此大的使用方式, 肯定还会存在灵活性更大的API, 是的, 这就是我们马上要讲的Dynamic Shortcuts, 我把它称为动态配置. 说起动态配置, 那肯定是用java代码实现了, 那如何实现呢? 首先第一步, 我们需…

Shortcuts,让你可以在系统的桌面上为所欲为

/ 今日科技快讯 / 近日&#xff0c;有用户刷抖音时看到烤虾广告下单&#xff0c;实付款194元买了250克烤虾干&#xff0c;货到付款后发现是三无产品&#xff0c;且外形口感与广告宣传天差地别。对此抖音表示&#xff0c;已对此事展开相关调查&#xff0c;并下架涉嫌虚假宣传…

Shortcuts使用解析(一)

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/susan_123456/article/details/93793490 Shortcuts是什么&#xff1f; Shortcuts是指在桌面长按App图标而出现的快捷方式&#xff0c;可以为你的App的关键功能添加更快速的…

是时候来了解android7了:shortcuts(快捷方式)

本文已授权微信公众号&#xff1a;鸿洋&#xff08;hongyangAndroid&#xff09;在微信公众号平台原创首发。 就在前几天的一个晚上, Google召开了它的秋季发布会, 毫无悬念的宣布了它的最新手机品牌Pixel, 与此同时我的nexus设备也从亲儿子降级成为干儿子. 不过还好Google并没…

Android 7.1 新特性:快捷方式 Shortcuts 详解

Android 7.1 新特性&#xff1a;快捷方式 Shortcuts 详解 一、Shortcuts 介绍 Android 7.1 允许 App 自定义 Shortcuts&#xff0c;类似 iOS 的 3D touch。通过在桌面长按 App 弹出 Shortcut 列表&#xff0c;点击某个 Shortcut 快速进入某项操作&#xff0c;同时 Shortcut 可以…

Android7.1新特性:快捷方式Shortcuts详解

Shortcuts介绍 Android7.1&#xff08;API Level 25&#xff09;及以上系统可以自定义Shortcuts&#xff0c;通过在桌面上长按App Icon弹出Shortcut列表&#xff0c;点击某个shortcut可使用户快捷得打开App里常用的或推荐的任务。长按列表中的任一个Shortcut可拖动到桌面进行固…

oracle 左连接

oracle左连接小结 当使用左连接关联表进行查询时&#xff0c;如果右侧的表在关联的条件中有重复的数据&#xff0c;就会导致最后的查询结果比预期的多&#xff0c;比如&#xff1a; select * from A 需要关联的表 select * from B 这里的两个表的id都是主键&#xff0c;现在…

lambda多表左连接

下面是mysql多表左连接&#xff0c;对应的lambda表达式写法&#xff0c;只为快速解决你的问题&#xff0c;详细的就不介绍了&#xff0c;只出结果&#xff0c;相信稍微有点基础的都能看懂。相关知识点&#xff0c;请自行百度 关键字&#xff1a;GroupJoin、SelectMany sql语句…

实例讲解内连接、左连接、右连接、交叉连接、外连接以及全连接

目录 示例表&#xff1a;1.内连接-inner&#xff1a;实例1&#xff1a;内连接表a和表b实例2&#xff1a;内连接表a和表c实例3&#xff1a;内连接表a和表b,使用“>”号实例4&#xff1a;内连接表a和表b,使用“<”号实例5&#xff1a;内连接表a和表b,指定字段显示实例6&…

mysql 左连接查询记录数,MySQL左连接查询记录行数

最近修复一个数据问题&#xff0c;其中用到了左连接&#xff0c;我的意识里还以为A左连接B&#xff0c;查询出的记录数量会是A的记录数&#xff0c;然而实际操作后发现认知严重错。 网上关于左连接的一张图 摘自网上的一张图&#xff0c;图确实没毛病&#xff0c;但我却产生了误…

mysql左连接出现笛卡尔积_Mysql内连接、左连接会出现笛卡尔积的理解

先简单解释一下笛卡尔积。 现在,我们有两个集合A和B。 A = {0,1} B = {2,3,4} 集合 AB 和 BA的结果集就可以分别表示为以下这种形式: AB = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)}; BA = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)}; 以上AB和BA的结…

关于左右连接

首先来看一下两张主要的表&#xff1a; persons表 orders表 现在我们希望列出所有的人&#xff0c;以及他们的定购。 SELECTpersons.last_name,persons.first_name,orders.order_no FROMpersons LEFT JOIN orders ON persons.pid orders.pid ORDER BYpersons.last_nam…

LINQ左连接

title: linq左连接 date: 2021-12-05 08:45:48 tags: C# Linq LINQ语言继承查询 近日项目实践中遇到这样的一个事情。在一个项目需求里存在这么一个情况&#xff0c;有以下一个主表与几个基础数据表组成一个大表&#xff0c;要求主表中的有的数据必须展示出来&#xff0c;但大…

ClickHouse左连接

A左连接B>S1区域 1、等价方式一 SELECT date, ts, country, province, city,ye_no FROM (SELECT date, ts, country, province, city,0 AS yes_no FROM DBa.tba WHERE (date today()-1) ) ALL LEFT JOIN (SELECT date, ts, country, province, city FROM DBb.tbb WH…

【Mysql】图解左、右、内与全连接

一、前言 使用学生表与成绩表来演示Mysql中的各种连接查找 学生表的建表语句如下&#xff1a; CREATE TABLE student(id int(11) NOT NULL AUTO_INCREMENT COMMENT 自增序号,st_id int(11) DEFAULT NULL COMMENT 学生id,st_name varchar(255) DEFAULT NULL COMMENT 学生姓名…

使用VC和MATCOM结合开发应用程序心得笔记

使用VC和MATCOM结合开发应用程序心得笔记1. 什么是Matcom?Matcom是MathTools公司(UPenn)开发的一个基于C矩阵函数库Matrix的一个matlab m文件与cpp文件的转换程序。MIDEVA为他的一个集成调试编译环境(界面)。Matcom独立于matlab之外&#xff0c;但需要外部的c编译器&…

MATLAB与VC混合编程(1)

在本节中先介绍matcom&#xff0c;使得VC能调用Matlab 的M文件&#xff0c;从而实现混合编程。 Matcom是mathTools公司推出的一个能将M文件转化成相同功能C代码的工具。相比Matlab自带的编译器Compiler&#xff0c;用Matcom转化代码要简单和方便得多。以VC6.0和Matcom为例&…

利用Matcom实现基于MATLAB的混合编程

利用Matcom实现基于MATLAB的混合编程 来源: 神经网络 作者&#xff1a;AI俱乐部 网友评论 0 条 浏览次数 42 <script> remark_look(re_look.php?cid17&tid1843); </script> Matcom是mathTools公司推出的最早的Matlab到C的编译器。后来&#xff0c;由于Mathto…

深度学习(十二):Matconvnet小试牛刀与提特征

该节简单介绍一下如何使用Matconvnet的现有的模型进行图像分类实验以及提取图像对应层的特征。 先来看看如何用训练好的imagenet网络模型进行图像的预测&#xff0c;英文版的官网教程就在这里&#xff1a; http://www.vlfeat.org/matconvnet/quick/ 检测图像分类之前&#x…