11/09
2016

Android 7.1 新特性之 Shortcuts 一些实践和问题

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

 

Shortcuts 全面介绍分为三篇:
1. Android 7.1 新特性之 Shortcuts 介绍
2. Android 7.1 新特性之 Shortcuts 一些实践和目前的问题
3. 三方桌面支持 Android SDK 7.1 新特性 Shortcuts
本文为第二篇,如果不了解 Shortcuts 基本使用建议先看上面第一篇。

 

6. 最佳实践

这块官网已经给出了一部分建议,包括:
(1) 设计上和系统 App 的 Shortcuts 保持一致
(2) 最多添加 4 个 Shortcuts 以保持在启动器中显示的样式最佳
目前虽然说是 5 个,但实际最多只能添加 4 个,可见7.2 Shortcut 添加或修改无效中介绍。

 

(3) 限制 Label 长度
其中shortcutShortLabel建议不超过 10 个字符,shortcutLongLabel 建议不超过 25 个字符。这块可能有些问题,可见7.1 LongLabel 和 ShortLabel中介绍。

 

(4) 记录 Shortcut 及其对应操作使用记录
这个在5.3 跟踪 Shorcut 使用情况中已经介绍了。

 

(5) 只在 Shortcut 意义不变的情况下更新,否则新增
(6) 动态 Shortcuts 在 BackUp 恢复后不可以直接恢复,考虑适时新增或更新已有的 Shortcuts

 

除了以上这些外,个人觉得还有几点需要遵守:
(7) 如何更好的删除(废弃)老的 Shortcut
这里主要考虑到删除老的 Shortcut,可能会影响已经固定的 Shortcut。
对于静态 Shortcuts,直接删除配置文件中对应的 Shortcut 即可,系统桌面会将已固定的该 Shortcut 置灰,点击会提示 shortcutDisabledMessage。
对于动态 Shortcuts 建议通过禁用的方式而不是直接删除的方式,因为已经删除的动态 Shortcut 如果被固定了依然是可用的,所以希望该入口不可用最好的方式是禁用。

 

(8) 始终设置shortcutDisabledMessage
根据上面的介绍废弃老的 Shortcut 较好的方式是禁用,通过自定义shortcutDisabledMessage去更友好的提示用户。

 

(9) 动态添加 Shortcut 前需要判断 API 版本不小于 25
否则在低版本会报 ClassNotFoundException 异常。

 

7. 一些问题

7.1 LongLabel 和 ShortLabel

LongLabelShortLabel的含义,官方 API 文档解释的并不是很清楚。
在 Nexus 6 上测试,当 LongLabel 长度大于 17 个小写字符时,会显示 ShortLabel,而不是 LongLabel。这里的界限长度跟大小写、空格都有关,应该是受限于桌面 Shortcuts 列表 Item 的宽度!_-具体还得等源码开放。

 

7.2 Shortcut 添加、修改、点击无效

可能原因:
(1) shortcutId 被覆盖
shortcutId 是唯一标识,相同 shortcutId 会被覆盖。

 

(2) intent 不对
intent 必须设置 android:action 属性,同时目标 Activity 必须有效即已在 Manifest 中声明。

 

(3) 后台 App 有频率限制
当应该完全退到后台(无 Activity 或 Service 在前台时),其操作 Shortcut(包括添加、删除、修改) 的频率是受限的。可通过isRateLimitingActive()查询是否已受限,true表示已受限。
若已受限,可通过开发者选项中“重置 ShortcutManager 调用频率限制”或命令行

解决。

 

(4) Shortcut 个数限制
虽然官方文档介绍静态和动态 Shortcut 总和不能超过 5 个,通过getMaxShortcutCountPerActivity()得到的也是 5,但实际测试下来是不超过 4 个!_-具体还得等源码开放。

 

8. 三方桌面支持 Shortcuts——LauncherApps

如果三方桌面希望支持这个特性,请参考 LauncherApps API 介绍,不过只有系统默认桌面才有权限得到其他 App Shortcuts 信息。

 

可通过hasShortcutHostPermission()查看是否拥有权限,如果没有权限,会报如下异常:

随手点点下面广告,支持我维护本站吧