使用Dynamic Shortcuts

article/2025/8/17 20:32:57

在看完Static Shortcuts后, 我们不相信Google仅仅给我们开发者开放了局限性如此大的使用方式, 肯定还会存在灵活性更大的API, 是的, 这就是我们马上要讲的Dynamic Shortcuts, 我把它称为动态配置.

说起动态配置, 那肯定是用java代码实现了, 那如何实现呢?
首先第一步, 我们需要利用一下代码拿到ShortcutManager

getSystemService(ShortcutManager.class)

拿到ShortcutManager后, 我们可以调用setDynamicShortcuts(List)方法去设置Shortcut, 那这个List如何得到呢? 我们来看看完整点的代码,

private void setupShortcuts() {mShortcutManager = getSystemService(ShortcutManager.class);List<ShortcutInfo> infos = new ArrayList<>();for (int i = 0; i < mShortcutManager.getMaxShortcutCountPerActivity(); i++) {Intent intent = new Intent(this, MessageActivity.class);intent.setAction(Intent.ACTION_VIEW);intent.putExtra("msg", "我和" + mAdapter.getItem(i) + "的对话");ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + i).setShortLabel(mAdapter.getItem(i)).setLongLabel("联系人:" + mAdapter.getItem(i)).setIcon(Icon.createWithResource(this, R.drawable.icon)).setIntent(intent).build();infos.add(info);
//            manager.addDynamicShortcuts(Arrays.asList(info));}mShortcutManager.setDynamicShortcuts(infos);
}

这段代码的背景是我们模拟了一个联系人列表功能, 在launcher中我们长按图标会出现一定数量的联系人快捷方式, 点击某个快捷方式会直接跳转该联系人相关的页面. 好, 介绍完背景, 我们来看代码, 首先我们通过getSystemService(ShortcutManager.class)来拿到ShortcutManager, 接下来一个for循环, 注意这个for循环的次数, 因为我们要添加的Shortcut不能是无限个, 所以这里我们用getMaxShortcutCountPerActivity来获取到最大个数. 然后在for循环里, 我们首先构造一个intent, 注意, 这里和Static Shortcut一样, 必须要提供一个Action. 然后我们用ShortcutInfo.Builder来构造一个ShortcutInfo并且放到List中, 最终我们调用mShortcutManager.setDynamicShortcuts(infos)来设置Shortcuts.

好了, 代码其实很简单, 我们来看看效果.

这里写图片描述

是不是很666?
动态更新 Shortcuts

上面的代码我们虽然说是Dynamic, 但仅仅是使用java代码实现的罢了, 真正的Dynamic我们接下来才去讲解, 在讲解Dynamic之前, 我们先来介绍一个名词-Pinning Shortcuts, 这是个啥玩意呢? 其实对于Shortcut, Android是允许我们直接放到桌面的, 这样就更加方便了用户的操作, google把他称作为Pinning Shortcuts, 具体啥样, 我们来张图就明白了.

这里写图片描述

对于这个Pinning Shortcuts, google的文档说, 我们开发者是没有权利去删除的, 能删除它的只有用户. 那我该项功能删除了咋办? 这东西还在桌面上, 是不是APP要崩? 当然Google考虑到了这点, 它允许我们去disable这个shortcut. 具体还是来看代码, 这里我们长按item来模拟一下删除.

private void removeItem(int index) {List<ShortcutInfo> infos = mShortcutManager.getPinnedShortcuts();for (ShortcutInfo info : infos) {if (info.getId().equals("id" + index)) {mShortcutManager.disableShortcuts(Arrays.asList(info.getId()), "暂无该联系人");}}mShortcutManager.removeDynamicShortcuts(Arrays.asList("id" + index));
}

首先我们先调用mShortcutManager.getPinnedShortcuts()来获取到所有的Pinning Shortcuts, 然后去遍历它, 找到我们删除的那个, 然后通过APIdisableShortcuts(List)来disable掉该项, 最后我们还要用过removeDynamicShortcuts(List)来从shortcuts中移除. 来看看效果.

这里写图片描述

通过效果中, 我们可以看到, 我们disableShortcuts的那个Pinning Shortcut已经变灰了, 而且在点击的时候会提醒暂无该联系人, 这个提醒正是disableShortcuts的第二个参数.

现在, 删除和禁用我们已经了解了, 那更新呢? 假如我修改了某个联系人的名字, shortcut是不是也应该相应的修改呢? 是的, 这里还是需要我们通过代码来实现.

private void updItem(int index) {Intent intent = new Intent(this, MessageActivity.class);intent.setAction(Intent.ACTION_VIEW);intent.putExtra("msg", "我和" + mAdapter.getItem(index) + "的对话");ShortcutInfo info = new ShortcutInfo.Builder(this, "id" + index).setShortLabel(mAdapter.getItem(index)).setLongLabel("联系人:" + mAdapter.getItem(index)).setIcon(Icon.createWithResource(this, R.drawable.icon)).setIntent(intent).build();mShortcutManager.updateShortcuts(Arrays.asList(info));
}

构建intent我们就不说了, 接下来我们又使用ShortcutInfo.Builder来构建了一个新的ShortcutInfo, 最后我们是用过updateShortcuts(List)来实现更新shortcut的, 很简单, 来看看效果.

这里写图片描述

ok, 现在, Android7.1的Shortcuts功能我们就差不多介绍完了, 文章中的实例代码大家可以在https://github.com/qibin0506/Android7_Shortcuts_Demo上下载到, 官网的文档大家也可以多看看, 这里给出地址: https://developer.android.com/preview/shortcuts.html

最后的彩蛋:大家都知道, 从android 7开始, google开始推广圆形图标了, 那肯定有很多人疑惑“那我在之前的launcher上咋办? 很丑陋啊”, 其实这点google完全考虑到了,圆形图标并不是通过android:icon指定的, 是一个额外提供的属性支持圆形图标的:android:roundIcon, 所以说,现在我们的manifest应该这么写了:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.android.commitcontent.app"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:roundIcon="@mipmap/ic_launcher_round"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>
</manifest>

看application的配置, android:icon指定普通图标, android:roundIcon指定的是圆形图标, 那么在支持圆形图标的launcher上就会显示圆形图标, 我们现在大部分人用的launcher上还是显示默认的图标。

原网址:http://blog.csdn.net/qibin0506/article/details/52878690


http://chatgpt.dhexx.cn/article/0E16y3hr.shtml

相关文章

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…

项目总结四:神经风格迁移项目(Art generation with Neural Style Transfer)

1、项目介绍 神经风格转换 (NST) 是深部学习中最有趣的技术之一。它合并两个图像, 即 内容图像 C&#xff08;content image&#xff09; 和 样式图像S&#xff08;style image&#xff09;, 以生成图像 G&#xff08;generated image&#xff09;。生成的图像 G 将图像 C 的 内…

Matconvnet学习笔记

Introduction to Matconvnet MatConvNet是实现用于计算机视觉领域的卷积神经网络(CNN)的MATLAB工具箱。自从取得突破性工作以来,CNN在计算机视觉领域有一个重大影响&#xff0c;特别是图像理解&#xff0c;基本上取代了传统图像表示。有许多其他机器学习、深度学习和CNN开源库的…