Android 7.1 新特性之 Shortcuts 介绍

开发 开发工具
今天主要介绍关于Android 7.1 的新特性Shortcuts。

Android 7.1 允许 App 自定义 Shortcuts,类似 iOS 的 3D touch。通过在桌面长按 App 弹出 Shortcut 列表,点击某个 Shortcut 快速进入某项操作,同时 Shortcut 可以拖动到桌面进行固定,如下图系统日历 App:

系统日历 App

由于 7.1 SDK 的 Sources 尚未开放,目前大部分内容还是根据官方 API 文档而来,还有些细节和可能的 Bug 还得等 Sources 开放。

Shortcuts 全面介绍分为两篇,本文是基础介绍,关于 Shortcuts 一些不错的实践和目前的问题可访问 trinea.cn ***文章。

1. Shortcuts 作用及分类

Shortcuts 为 App 常用操作提供了快速访问的方式,如上面日历的新建提醒。 这个功能目前只能在 Android 7.1 系统桌面进行使用,这个依然保留着“应用抽屉”古老设计的产品国内应该没多少用户。三方桌面可以通过 API 接入这个功能。

目前支持 Shortcut 的应用主要还是 Google 的 App,看到有即刻的朋友说他们在 7.1 系统发布时快速支持了这个功能并上线,速度很赞。

类似 BroadcastReceiver 可通过静态和动态方式注册,Shortcuts 也可以通过静态和动态方式添加。

2. 静态 Shortcuts(Static Shortcuts)

静态 ShortcutsStatic Shortcuts 通过在 Manifest 中声明添加。缺点是不可以修改,只能通过应用升级来添加新的静态 Shortcuts。添加主要分为两步:

(1)AndroidManifest 的 Main Launcher 对应的 Activity 内添加 meta-datameta-data name 为 android.app.shortcuts,如下:

AndroidManifest 的 Main Launcher 对应的 Activity 内添加 meta-datameta-data name 为 android.app.shortcuts

必须在 Main Launcher 对应的 Activity 内设置,其中 android:resource 指向定义了 shortcuts 的资源文件。

(2)资源文件中定义具体的 shortcutsres 目录下新建 xml 文件夹,并新建 shortcuts.xml 文件,内容如下:

资源文件中定义具体的 shortcutsres 目录下新建 xml 文件夹,并新建 shortcuts.xml 文件

以 shortcuts 元素为根,可以包含多个 shortcut 元素,每个 shortcut 元素表示一个 shortcut。其中属性分别表示:

(1) shortcutId 表示 shortcut 唯一标识符,相同的 shortcutId 会被覆盖。必须字段。

(2) shortcutShortLabel 为将 shortcut 拖动到桌面时显示的名字,官方建议不超过 10 个字符,必须字段。

(3) shortcutLongLabel 为 shortcut 列表中每个 shortcut 的名字,不宜过长,如果过长或未设置默认会显示 ShortLabel,官方建议不超过 25 个字符。可选字段。

(4) icon 为 shortcut 的 icon,在列表展示和拖动到桌面时显示需要,可选字段。

(5) enabled 表示 shortcut 是否可用,false 表示禁用。xml 中这个属性几乎没有被设置为 false 的实际场景,具体原因可见 6.7 如何更好的删除(废弃)老的 Shortcut中介绍。

(6) shortcutDisabledMessage 为已固定在桌面的 shortcut 被 Disabled 后点击时的 Toast 提示内容。可选字段。

(7) intent 为点击 shortcut 时响应的 intent,必须字段。

这里可以添加多个 intent,但点击时不会启动所有 intent,而是启动***一个 intent,在这个 intent 回退时会启动它前面一个 intent,相当于自动将所有 intent 添加到了堆栈。

intent 可设置属性包括:

android:action、android:data、android:mimeType、android:targetClass、android:targetPackage,其中 android:action 为必须属性。

3. 动态 Shortcuts(Dynamic Shortcuts)

动态 ShortcutsDynamic Shortcuts 通过 ShortcutManager API 进行操作。可以动态添加、修改、删除。

动态 ShortcutsDynamic Shortcuts可以动态添加、修改、删除

通过 ShortcutInfo.Builder 新建 ShortcutInfo,再通过 shortcutManager 添加即可。其他:

(1) setDynamicShortcuts(List) 可以替换并添加所有 shortcut 列表;

(2) addDynamicShortcuts(List) 可以添加新的 shortcut 到列表,超过***个数会报异常;

(3) updateShortcuts(List) 可以更新一组 shortcuts;

(4) removeDynamicShortcuts(List) 和 removeAllDynamicShortcuts() 可以删除部分或所有 shortcuts。

ShortcutInfo 的属性与 xml 中定义字段含义一致,shortcutId shortcutShortLabel intent 是必须设置的字段,并且 intent 必须设置 Action。

4. 固定的 Shortcuts(Pinned Shortcuts)

指通过拖动固定到桌面的 Shortcuts,App 不可以添加、修改、删除这些 Shortcuts,只能禁用他们。即便 App 内删除了某个 Shorcut,对应的已固定到桌面的 Shortcuts 也不会被删除。

可以通过:

(1) getPinnedShortcuts() 得到所有固定的 Shortcuts 的信息。

(2) disableShortcuts(List) 或 disableShortcuts(List, CharSequence) 禁用动态的 Shortcuts。

对于静态的 Shortcuts 需要在资源文件中设置 android:enabled="false" 进行禁用,不过没有必要,静态 Shortcuts 可直接通过删除达到禁用的效果,具体原因可见 6.7 如何更好的删除(废弃)老的 Shortcut 中介绍。

静态 Shortcuts 和动态 Shortcuts 是有***个数限制的,默认为 5,超过***个数后添加会报异常。而固定的 Shortcuts 并没有个数限制,并且固定的 Shortcut 对应的 Shortcut 即便被动态删除了,依然可以通过 id 进行 Update 操作。

5. 其他

5.1 动态 Shortcuts 与静态 Shortcuts 区别

(1) 静态 Shortcuts 只能通过升级应用修改,动态 Shortcuts 随时可以修改;

(2) 静态 Shortcuts 的 Intent 无法设置 Flag,默认为 FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TASK Flag,即若应用运行中会清除所有已存在的 Activity。动态 Shortcuts 的 Intent 可以设置 Flag;

(3) 静态 Shortcuts 的 rank 系统默认根据声明顺序设置,动态 Shortcuts 的 rank 可以通过 setRank(int rank) 接口主动设置,rank 不能小于 0,值越大表示在 shortcut 列表展示时离 App Icon 越远。静态 Shortcuts 默认比动态 Shortcuts 离 App Icon 更近。

(4) 静态 Shortcuts 删除可以直接删除,动态 Shortcuts 建议通过禁用删除;

5.2 动态 Shortcuts 操作的频率问题

当应该完全退到后台(无 Activity 或 Service 在前台时),其操作 Shortcut(包括添加、删除、修改) 的频率是受限的。可通过 isRateLimitingActive() 查询是否已受限,true 表示已受限。

5.3 跟踪 Shorcut 使用情况

在 Shortcut 被选择或者其关联的操作被操作时需调用 reportShortcutUsed(String shortcutId) 接口上报数据,为了方便启动器收集应用 Shortcuts 使用情况,可能未来进行预测或者向开发者展示哪些操作适合作为 Shortcuts 以及其优先级。

PS:这个接口其实挺尴尬的,一方面需要 App 主动上报,侵入性太强。另一方面这个预测功能未来也不好加到 Shortcuts 推荐里,更多是个开发工具相关功能。

***是由启动器自己纯粹收集 Shortcut 被选择的使用情况数据,而不需要统计 Shortcut 被关联操作通过其他方式调用的使用情况数据。至于哪些操作适合作为 Shortcuts,开发者大可通过其他监控 SDK 去判断。

【本文是51CTO专栏作者Trinea的原创文章,转载联系作者本人获取授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2009-11-23 20:35:12

ibmdwRational

2012-03-14 12:29:55

JavaPlay Framwo

2021-04-30 19:53:41

Java表达式代码

2009-08-12 13:15:44

C#3.5新特性

2011-07-06 16:38:57

Xcode Preview

2009-08-18 17:03:49

C#3.5新特性

2009-03-24 11:54:12

2009-08-19 16:51:14

C# 4.0 dyna

2021-03-06 08:10:16

Redis6 Java架构分布式框架

2013-07-29 15:13:35

2013-10-29 16:50:50

Android 4.4特性

2013-02-26 09:36:57

RubyRuby 2.0

2009-08-28 08:46:15

Windows 7防火墙

2009-09-27 10:00:00

OSGi 4.2

2019-03-05 15:03:09

Android Q安卓系统功能

2013-11-04 17:28:44

Android

2013-05-20 10:25:45

vSphere 5.1vMotion

2018-09-19 16:15:18

MySQL直方图数据库

2009-08-03 18:34:43

TuplizersNHibernate

2009-08-24 17:55:44

C#3.0新特性
点赞
收藏

51CTO技术栈公众号