Android 应用快捷(shortcut)功能的详解(一)

news2024/11/24 18:46:36

一、介绍

        在现如今的应用中,一些开发者为了把核心的业务尽快的方便让使用者触摸到,想尽各种办法。比如前期的桌面插件,点击直接拉起核心业务。现在我们在主流的APP中,只要你长按桌面快捷键,发现弹出来的是不是单一的卸载,还包括好多应用快捷键,比如微信和支付宝:付款码、收款码、扫一扫等。

小米商城
​​​​

这种炫酷的技术是怎么实现?它就是我们shortcut的功能。

二、shortcut的介绍

快捷方式可帮助用户快速访问您的应用的某些部分,从而为他们呈现特定类型的内容

        如何以快捷方式来呈现内容取决于您的用例,以及快捷方式的上下文是属于应用驱动型还是用户驱动型。虽然静态快捷方式的上下文不会更改,而动态快捷方式的上下文会不断变化,但这两种情况下的上下文都由您的应用驱动。如果用户选择了希望应用以哪种方式(例如使用固定快捷方式)向其呈现内容,则此时的上下文是由用户定义的。以下场景展示了各类快捷方式的一些用例:

        静态快捷方式最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。由于大多数启动器一次只能显示四个快捷方式,因此静态快捷方式对常见 Activity 非常有用。例如,如果用户希望以特定的方式查看他们的日历或电子邮件,使用静态快捷方式可确保他们在执行日常任务时始终获得一致体验。

        动态快捷方式用于应用中与上下文相关的操作。上下文相关快捷方式是专为用户在应用内执行的操作而定制的。例如,如果您构建的游戏允许用户在启动时从当前关卡开始,您需要经常更新该快捷方式。动态快捷方式允许游戏在每次用户通关后更新快捷方式。

        固定快捷方式用于用户驱动的特定操作。例如,用户可能需要将特定网站固定到启动器。这很有用,因为它允许用户执行自定义操作,比如一步导航到网站,这比使用浏览器的默认实例速度更快。

1、创建静态快捷方式

        静态快捷方式提供指向应用内常规操作的链接,这些操作在应用当前版本的生命周期内应保持一致。适合使用静态快捷方式的操作包括查看已发邮件、设置闹钟以及显示用户当天的锻炼活动

静态快捷方式创建步骤:

1、在AndroidManifest中,找到 intent 过滤器设置为 android.intent.action.MAIN 操作和 android.intent.category.LAUNCHER 类别的 Activity。

2、向此 Activity 添加 <meta-data> 元素,该元素引用了定义应用快捷方式的资源文件

 <meta-data android:name="android.app.shortcuts"
                 android:resource="@xml/shortcuts" /> 

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

4、在这个新的资源文件中,添加 <shortcuts> 根元素,其中包含 <shortcut> 元素的列表。每个 <shortcut> 元素都包含有关一个静态快捷方式的信息,包括其图标、说明标签及其在应用内启动的 intent

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="compose"
        android:enabled="true"
        android:icon="@drawable/lion_close"
        android:shortcutShortLabel="shortcutShortLabel"
        android:shortcutLongLabel="shortcutLongLabel"
        android:shortcutDisabledMessage="shortcutDisabledMessage">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.example.wiik.testdemo"
            android:targetClass="com.example.wiik.testdemo.screem.TestTwoWindowActivity" />
        <!-- If your shortcut is associated with multiple intents, include them
             here. The last intent in the list determines what the user sees when
             they launch this shortcut. -->
        <categories android:name="android.shortcut.conversation" />
        <capability-binding android:key="actions.intent.CREATE_MESSAGE" />
    </shortcut>
    <!-- Specify more shortcuts here. -->
</shortcuts>

一个shortcut就是一个快捷入口。

关键字介绍:

须为 android:shortcutId 和 android:shortcutShortLabel 提供值。其他所有的值均为可选。

1、android:shortcutId

定义一个id,表示 ShortcutManager 对象对其执行操作时的快捷方式。

2、android:shortcutShortLabel

这是用于简短说明快捷方式用途的词组。请尽可能将快捷方式的“简短说明”的长度限制在 10 个字符以内

3、android:shortcutLongLabel

这是用于详细说明快捷方式用途的词组。如果空间足够大,启动器会显示此值,而不是 android:shortcutShortLabel。 请尽可能将快捷方式的“详细说明”的长度限制在 25 个字符以内。

4、android:shortcutDisabledMessage

这是当用户尝试启动已停用的快捷方式时出现在支持的启动器中的消息。此消息应向用户解释快捷方式现在停用的原因。 如果 android:enabled 为 true,则此属性的值无效。

5、android:enabled

这用于确定用户是否能够与支持的启动器中的快捷方式进行交互。 android:enabled 的默认值为 true。 如果您将其设置为 false,则还应设置 android:shortcutDisabledMessage,用于说明停用该快捷方式的原因。如果您认为自己不需要提供此类消息,最简单的做法就是从 XML 文件中完全移除该快捷方式。

6、android:icon

这是启动器向用户显示快捷方式时所用的位图或自适应图标。此值可以是某个图片的路径,也可以是包含相应图片的资源文件。请尽可能使用自适应图标来提高性能和一致性。

配置内部元素

7.action节点

这个action是启动目标页的配置信息。和我们正常启动一个页面一样

7.1、android:action:启动方式

7.2、android:targetPackage:目标包名

7.3、android:targetClass:目标类

8、categories

这用于为应用的快捷方式所执行的各类操作(如创建新的聊天消息)提供分组。

如需查看支持的快捷方式类别的列表,请参阅 ShortcutInfo 类参考文档。

9、capability-binding

声明与此快捷方式关联的功能。

2、创建动态快捷方式

动态快捷方式提供指向应用内特定的上下文相关操作的链接。这些操作可能会在应用的不同使用场景间发生变化,甚至会在应用运行时发生变化。适合使用动态快捷方式的用例包括致电特定人员、导航到特定位置,以及从用户的上一个存档点加载游戏

ShortcutManagerCompat Jetpack 库是 ShortcutManager API 的帮助程序,可让您管理应用中的动态快捷方式。使用 ShortcutManagerCompat 库可减少样板代码

ShorcutManagerCompat API 让您的应用可以通过动态快捷方式执行以下操作:

  • 推送和更新:使用 pushDynamicShortcut() 发布和更新动态快捷方式。如果已经存在具有相同 ID 的动态快捷方式或固定快捷方式,那么每个可变快捷方式都会更新。
     
  • 移除:使用 removeDynamicShortcuts() 移除一组动态快捷方式,或使用 removeAllDynamicShortcuts() 移除所有动态快捷方式。

        val shortcut = ShortcutInfoCompat.Builder(context, "myshortcutid")
            .setShortLabel("Website")
            .setLongLabel("Open the website")
            .setIcon(IconCompat.createWithResource(context, R.drawable.icon_website))
            .setIntent(
                Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("https://www.abc.com/")
                )
            )
            .build()

        ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)

库的引用:

 dependencies {
           implementation "androidx.core:core:1.6.0"
           implementation 'androidx.core:core-google-shortcuts:1.0.0'
          
         }

3.创建固定快捷方式

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

 要将快捷方式固定到使用您的应用的受支持启动器上,请按顺序完成以下一系列步骤:

1、使用 isRequestPinShortcutSupported() 验证设备的默认启动器是否支持应用内固定快捷方式。

2、使用以下两种方式之一创建 ShortcutInfo 对象,具体采用哪种方式取决于是否已存在相应快捷方式:

        2.1:如果已存在相应快捷方式,请创建仅包含现有快捷方式 ID 的 ShortcutInfo 对象。系统会自动找到与该快捷方式相关的所有其他信息,并将其固定。

        2.2:如果您要固定原本不存在的新快捷方式,请创建包含新快捷方式 ID、intent 和简短标签的 ShortcutInfo 对象。

3、尝试通过调用 requestPinShortcut() 将快捷方式固定到设备的启动器上。在此过程中,您可以传入一个 PendingIntent 对象,用于仅在快捷方式成功固定后通知您的应用。

快捷方式固定后,您的应用可以使用 updateShortcuts() 方法更新其内容。

    @RequiresApi(Build.VERSION_CODES.O)
    fun update(context: Context)
    {
        val shortcutManager = context.getSystemService(ShortcutManager::class.java)

        if (shortcutManager!!.isRequestPinShortcutSupported) {
            val pinShortcutInfo = ShortcutInfo.Builder(context, "shortcutid").build()
            val pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo)


            val successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
                pinnedShortcutCallbackIntent, /* flags */ 0)

            shortcutManager.requestPinShortcut(pinShortcutInfo,
                successCallback.intentSender)
        }

    }

添加能力:capability

capability这个属于我们自定义,或者可以借助系统自带的。capability 取决于要实现的功能以及用户请求中包含的实际字词

通过以上的配置,我们已基本完成快接入口的。

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

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

相关文章

MapReduce实战案例(2)

案例二: MR实战之数据分类输出(自定义outputFormat) 2.1 项目准备 需求 现有一些原始日志需要做增强解析处理&#xff0c;流程&#xff1a; a) 从原始日志文件中读取数据b) 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志c) 如果成功增强&#xff0c;则输出…

提升日期处理效率:day.js 实战经验分享

theme: smartblue 本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。本文并不能代替 day.js 官方文档&#xff0c;日常工作中该查文档的还是要查文档。本文是写给刚接触 day.js 的工友&#xff0c;让这部分工友能更顺利上手 day.js。本文不涉…

SMESwin Unet:融合CNN和Transformer进行医学图像分割

文章目录 SMESwin Unet: Merging CNN and Transformer for Medical Image Segmentation摘要本文方法SuperpixelMCCT SMESwin Unet: Merging CNN and Transformer for Medical Image Segmentation 摘要 视觉Transformer 是自去年以来医学图像分割领域最受欢迎的新范式&#xf…

ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。解决方案

序 1、参考博文》①严格模式 - 知乎&#xff0c;②ts的tsconfig.son中文说明③TypeScript Number | 菜鸟教程 2、解决&#xff08;ts报错“this“ 隐式具有类型 “any“&#xff0c;因为它没有类型注释。&#xff09; 3、解决&#xff08;函数内this是undefined 的问题&#xf…

汽车EDI:如何与Stellantis建立EDI连接?

Stellantis 是一家实力雄厚的汽车制造公司&#xff0c;由法国标致雪铁龙集团&#xff08;PSA集团&#xff09;和意大利菲亚特克莱斯勒汽车集团&#xff08;FCA集团&#xff09;合并而成&#xff0c;是世界上第四大汽车制造商&#xff0c;拥有包括标致、雪铁龙、菲亚特、克莱斯勒…

Hive学习---1、Hive入门、Hive 安装

1、Hive入门 1.1 什么是Hive 1、Hive简介 Hive是由Facebook开源&#xff0c;基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能。 2、Hive本质 Hive是一个Hadoop客户端&#xff0c;用于将HQL&#xff08;Hive SQL…

【六一为孩子建模吧】沐风老师3DMAX建模雕刻插件SculptTool使用教程

3DMAX建模雕刻插件&#xff0c;该工具旨在使对角色和地形等有机模型进行小型编辑成为可能&#xff0c;而无需离开3dMax并启动如ZBrush等专用雕刻应用程序&#xff0c;就可以在3DMAX中直接对小型模型进行简单的雕刻建模处理&#xff0c;这样会方便很多。 【适用版本】 3dMax202…

【C++初阶】:string类

string 一string的基本用法二.迭代器1.基本使用2.语法糖3.反向迭代器4.const迭代器 三.容量四.插入和删除五.一个例题&#xff1a;解析协议六.读取空格七.一些其他函数 一string的基本用法 文档里 一般使用 二.迭代器 1.基本使用 string里重载了一种非常厉害的运算符[ ] 这个运…

【web安全】文件包含漏洞

目录 1.什么是文件包含漏洞 2.产生原因 3.文件包含的类型 3.1本地文件包含 3.2远程文件包含 4.攻击利用手法 4.1 file:协议 4.2 php://协议 ​4.3 zip://,bzip2://,zlib://协议 4.4 data://协议 4.5 PHP伪协议总结 5.如何防御&#xff1f; 6.常见系统的默认路径…

Tcl-11. 列表操作

Tcl 中的列表操作&#xff1a; 列表则是具有特殊解释的字符串。Tcl 中的列表操作和其它 Tcl 命令 一样具有相同的结构。 列表可应1用在诸如 foreach 这样的以列表为变元的循环命令中&#xff0c;也应于构建 eval 命令的延迟命令字符串。 一、list 命令 list 命令用来创建列表…

城市内涝的解决措施,城市内涝积水监测预警系统解决方案

随着城市化进程的加快&#xff0c;城市土地面积不断扩大&#xff0c;原本吸收雨水的土地被水泥、沥青等硬质材料所取代&#xff0c;导致雨水无法迅速渗透和排泄&#xff0c;增加了城市内涝的风险。同时&#xff0c;气候变化带来的极端降雨事件频率增加&#xff0c;更加加剧了内…

mysql触发器监听数据投递中间件

目前市面上有许多的 CDC&#xff08;Change Data Capture&#xff09; 框架用于监听数据库的数据变动&#xff0c;例如&#xff1a;canal、Debezium、Maxwell等都是用来解析 binlog 日志实现事件的监听。但是有一个情况就是如果公司对 binlog 日志文件的权限管控的很严格&#…

传统ERP和SaaS ERP区别在哪里?

一、ERP和SaaS ERP概念 企业资源计划 (ERP) 系统是许多企业的主干&#xff0c;助力管理整个企业内的会计、采购流程、项目等。对于许多 IT 部门而言&#xff0c;ERP 系统通常意味着大型、昂贵且耗时的部署&#xff0c;并可能需要进行大量硬件或基础设施投资。然而&#xff0c;…

基于标准库函数的STM32的freertos的移植(三)——MDK工程搭建、配置与修改

1.打开MDK5软件&#xff0c;新建MDK工程&#xff0c;将新建工程文件保存在Project_Stm32f407/mdk文件夹下&#xff0c;并将工程命名为freertos_M4&#xff0c;选择MCU型号为STM32F407ZG&#xff0c;新建工程文件的步骤如下图所示&#xff1a; 图1 新建工程 图2 保存工程路径和工…

ChatGPT-AI地图

ChatGPT-AI地图 1、AI-对话 应用名称应用地址ChatGPThttps://chat.openai.com/NotionAINotion AIA.I. Data Sidekick&#xff1a;AI工具编写 SQL、文档等的速度提高10倍[AirOpsWritesonic&#xff1a;人工智能写作辅助工具Writesonic - Best AI Writer, Copywriting & Par…

《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习CSAPP时的个人笔记&#xff0c;分享出来与大家学习交流&#xff0c;目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记&#xff0c;在复习回看时发现部分内容存在一些小问题&#xff0c;因时间紧张来不及再次整理…

MySQL 数值函数

文章目录 数值函数1. abs(num)2. ceil(num)3. floor(num)4. mod(num1,num2)5. rand()6. round(num,n)7. truncate(num,n)8. sqrt(num) 数值函数 数值函数用来处理数值方面的运算&#xff0c;能够提高用户的工作效率。常用的数值函数如下表所示&#xff0c;函数括号内为输入的参…

牛客网基础语法11~20题

前言&#xff1a;今天是咱们第二期刷牛客网上的题目。 目标&#xff1a;对输入输出的格式&#xff0c;方法&#xff0c;类型掌握熟练&#xff0c;对double&#xff0c;float理解深入&#xff0c;编程思想更进一步。 鸡汤&#xff1a;人活着&#xff0c;再苦再累&#xff0c;都别…

16-Vue技术栈之常用的 Composition API

目录 1、什么是组合式 API&#xff1f;2、拉开序幕的setup3、ref函数4、reactive函数5、Vue3.0中的响应式原理5.1 vue2.x的响应式5.2 Vue3.0的响应式 6、reactive对比ref7、setup的两个注意点8、计算属性与监视8.1 computed函数8.2 watch函数8.3 watchEffect函数 9、 生命周期1…

防雷接地的施工工艺与防雷施工方案

雷电是自然界的一种强大而危险的自然现象&#xff0c;经常造成重大财产损失和人员伤亡。为了保护建筑物和人员免受雷电的危害&#xff0c;防雷接地系统的设计和施工至关重要。本文将介绍防雷接地的施工工艺和防雷施工方案&#xff0c;强调专业和符合国家标准的方法&#xff0c;…