android7.1 shotcuts,Android 7.1 特性之 Shortcuts 一些实践和问题,如何更好的操作 Shortcut 以及目前系统问题...

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

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

LongLabel和ShortLabel的含义,官方 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 调用频率限制”或命令行

Java

adb shell cmd shortcut reset-throttling [ --user USER-ID ]

1

adbshellcmdshortcutreset-throttling[--userUSER-ID]

解决。

(4) Shortcut 个数限制

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

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

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

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

Java

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xx/com.xx.XXActivity}: java.lang.SecurityException: Caller can't access shortcut information

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)

1

2

3

java.lang.RuntimeException:UnabletostartactivityComponentInfo{com.xx/com.xx.XXActivity}:java.lang.SecurityException:Callercan'taccessshortcutinformation

atandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)

atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值