Android7.1允许应用自定义Shortcuts,类似于iOS的3Dtouch。在桌面长按App弹出快捷方式列表,点击快捷方式可以快速进入操作,同时可以将快捷方式拖到桌面固定,如下图。API官方文档来了,一些细节和可能的BUG还得等Sources打开。快捷方式的全面介绍分为两部分。本文为基础介绍。关于Shortcuts的一些好的做法和目前存在的问题,请访问tririnea.cn***文章。1.快捷方式的功能和分类快捷方式提供对应用常用操作的快速访问,例如上面日历的新提醒。该功能目前只能在Android7.1系统的桌面上使用。这款还保留着“应用抽屉”古老设计的产品在国内应该没有多少用户。三方桌面可以通过API访问该功能。目前支持Shortcut的应用主要是GoogleApps。看到有朋友说很快就支持了这个功能,在7.1系统发布的时候就上线了。速度非常好。类似于BroadcastReceiver可以静态和动态注册,Shortcuts也可以静态和动态添加。2.静态快捷方式(StaticShortcuts)StaticShortcutsStaticShortcuts是通过在Manifest中声明来添加的。缺点是不能修改,只能通过应用升级来添加新的静态快捷方式。添加主要分为两步:(1)在AndroidManifest的MainLauncher对应的Activity中添加meta-datameta-data名称为android.app.shortcuts,如下:必须在MainLauncher对应的Activity中设置,其中android:resource指向快捷方式的定义资源文件。(2)在资源文件中定义具体的shortcutsres目录新建xml文件夹,新建shortcuts.xml文件,内容如下:以shortcuts元素为根,可以包含多个shortcut元素,每个shortcut元素代表快捷方式。属性表示:(1)shortcutId表示快捷方式的唯一标识,相同的shortcutId会被覆盖。必填项目。(2)shortcutShortLabel是快捷方式拖到桌面时显示的名称,官方建议不超过10个字符,必填项。(3)shortcutLongLabel是快捷方式列表中每个快捷方式的名称。它不应该太长。如果太长或者没有设置,默认显示ShortLabel。官方建议不超过25个字符。可选字段。(4)图标为快捷方式图标,在列表显示拖拽到桌面时显示必填字段和选填字段。(5)enabled表示快捷方式是否可用,false表示禁用。xml中几乎没有将该属性设置为false的实际场景。具体原因参见6.7如何更好地删除(放弃)旧的Shortcut。(6)shortcutDisabledMessage为固定在桌面的快捷方式被禁用点击时的Toast提示内容。可选字段。(7)Intent是点击快捷方式时响应的intent,为必填字段。这里可以添加多个intent,但是点击的时候并不是所有的intent都会被激活,而是最后一个intent会被激活,这个intent回滚的时候会激活之前的intent,相当于自动把所有的intent加入到栈中。Intent可配置属性包括:android:action、android:data、android:mimeType、android:targetClass、android:targetPackage,其中android:action为必填属性。3.动态快捷方式(DynamicShortcuts)动态快捷方式DynamicShortcuts通过ShortcutManagerAPI进行操作。可以动态添加、修改、删除。通过ShortcutInfo.Builder新建一个ShortcutInfo,然后通过shortcutManager添加。其他:(1)setDynamicShortcuts(List)可以替换和添加所有的快捷方式列表;(2)addDynamicShortcuts(List)可以在列表中添加新的快捷方式,超过***个数会报异常;(3)updateShortcuts(List)可以更新一组快捷方式;(4)removeDynamicShortcuts(List)和removeAllDynamicShortcuts()可以删除部分或全部快捷方式。ShortcutInfo的属性与xml中定义的字段含义相同。shortcutIdshortcutShortLabelintent是必须设置的字段,intent必须设置Action。4.固定快捷方式(PinnedShortcuts)是指通过拖动固定到桌面的快捷方式。App无法添加、修改或删除这些快捷方式,只能禁用它们。即使在应用程序中删除了一个快捷方式,对应的固定在桌面的快捷方式也不会被删除。您可以通过以下方式获取所有固定的快捷方式信息:(1)getPinnedShortcuts()。(2)disableShortcuts(List)或disableShortcuts(List,CharSequence)禁用动态快捷方式。需要通过在资源文件中设置android:enabled="false"来禁用静态快捷方式,但这不是必需的。静态快捷方式可以通过删除直接禁用。具体原因参见6.7如何更好地删除(废弃)旧的Shortcuts中介绍的。静态快捷方式和动态快捷方式有最大数量限制,默认为5个,超过最大数量会报异常。固定快捷方式的数量没有限制,即使动态删除固定快捷方式对应的快捷方式,仍然可以通过id进行更新操作。5.其他5.1动态快捷方式与静态快捷方式的区别(1)静态快捷方式只能通过应用升级修改,而动态快捷方式可以随时修改;(2)staticShortcuts的Intent不能设置Flag,默认是FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASKFlag,即如果应用程序正在运行,所有现有的activity都会被清除。动态Shortcuts的Intent可以设置Flag;(3)静态Shortcuts的rank系统默认按照声明顺序设置,动态Shortcuts的rank可以通过setRank(intrank)接口主动设置。你离应用程序图标越远。默认情况下,静态快捷方式比动态快捷方式更接近应用程序图标。(4)静态快捷方式可以直接删除,动态快捷方式建议禁用删除;5.2动态Shortcuts操作的频率应该完全退到后台(当前台没有Activity或Service时),其操作Shortcuts(包括增删改查)的频率是有限制的。可以通过isRateLimitingActive()查询是否限速,true表示限速。5.3跟踪Shortcut使用情况当Shortcut被选中或操作其相关操作时,需要调用reportShortcutUsed(StringshortcutId)接口上报数据。为了方便启动器收集快捷方式的使用情况,它可能会在未来预测或向开发者展示哪些操作适合作为快捷方式以及它们的优先级。PS:这个界面其实挺尴尬的。一方面需要App主动上报,干扰太大。另一方面,这个预测功能以后也不好添加到Shortcuts推荐中,更多的是和开发工具相关的功能。***所选Shortcut的使用数据由launcher自身纯粹收集,无需通过其他方式统计关联操作调用的Shortcut的使用数据。至于哪些操作适合作为Shortcuts,开发者可以通过其他监控SDK来判断。【本文为专栏作家Trinea原创文章,转载联系作者获取授权】点此阅读作者更多好文
