关键类
如果你的应用程序针对Android 7.1(API级别25)或更高,你可以定义快捷方式在你的应用程序的具体行为。这些快捷方式可以显示在支持的桌面。快捷方式让用户在应用程序中快速启动普通或推荐的任务。
每个快捷方式引用一个或多个目标,其中每一个具体的行动在你的应用程序启动时,用户选择快捷方式。可以作为快捷方式表示的动作的例子包括以下内容:
- 映射应用程序中引导用户到特定位置。
- 通信应用程序中向朋友发送消息。
- 在媒体应用中播放下一集的电视节目。
- 加载游戏应用程序的最后一个保存点。
您可以为您的应用程序发布两种不同类型的快捷方式:
- 静态的快捷方式在资源文件打包成一个APK。因此,您必须等到更新整个应用程序才能更改这些静态快捷方式的详细信息。
- 动态的捷径是在程序运行时使用的shortcutmanager API。在运行时,您的应用程序可以发布,更新和删除其动态快捷方式。
一次最多可为您的应用发布五个快捷方式(组合的静态快捷方式和动态快捷方式)。但是,某些桌面应用程序不会显示您为应用程序创建的每个快捷方式。
用户可以将应用的快捷方式复制到启动程序,创建快捷方式寄托。用户可以创建的应用的固定快捷方式数量没有限制。 您的应用程式无法移除这些固定的捷径,但可以停用这些快速键
注意:虽然其他应用程序无法快捷方式中访问元数据,发射器本身就可以访问这些数据。因此,这些元数据应该隐藏敏感的用户信息。
图1:使用程序快捷方式,你可以面的关键行动,并采取用户立即深入到你的应用。
使用静态快捷键
静态快捷键应提供指向应用程序中常规操作的链接,这些操作应在应用程序当前版本的生命周期内保持一致。 对于静态快捷方式的好候选包括查看发送的消息,设置警报,以及显示用户的一天的锻炼活动。
要创建静态快捷方式,请完成以下步骤顺序:
- 在您的应用程序的清单文件(AndroidManifest.xml),找到一个活动,其意图过滤器被设置为android.intent.action.MAIN动作和android.intent.category.LAUNCHER类别。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application ... >
<activity android:name="Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
</manifest>
3.创建一个新的资源文件:res/xml/shortcuts.xml。
在这个新的资源文件,添加一个<shortcuts>根元素,其中包含一个列表<shortcut>元素。每个<shortcut>元素,又包含一个静态的快捷方式,包括它的图标,它的描述标签,它在应用程序内启动意图的信息:
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="compose"
android:enabled="true"
android:icon="@drawable/compose_icon"
android:shortcutShortLabel="@string/compose_shortcut_short_label1"
android:shortcutLongLabel="@string/compose_shortcut_long_label1"
android:shortcutDisabledMessage="@string/compose_disabled_message1">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example.myapplication"
android:targetClass="com.example.myapplication.ComposeActivity" />
<!-- If your shortcut is associated with multiple intents, include them
here. The last intent in the list determines what the user sees when
they launch this shortcut. -->
<categories android:name="android.shortcut.conversation" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>
使用动态快捷方式
动态快捷键应提供指向您应用程序中特定的上下文相关操作的链接。这些操作可以在您的应用程序使用之间更改,即使应用程序正在运行,它们也可以更改。 动态快捷方式的好候选包括调用特定人员,导航到特定位置,以及查看特定游戏的当前分数。
该ShortcutManager API允许你完成动态快捷键下面的操作:
- 发布:使用setDynamicShortcuts()重新定义的动态快捷键的完整列表,或者使用addDynamicShortcuts()以增加动态快捷键的现有列表。
- 更新:使用updateShortcuts()方法。
- 删除:删除使用一组动态的快捷键removeDynamicShortcuts()或使用删除所有动态快捷键removeAllDynamicShortcuts()
创建动态快捷方式并将其与您的应用相关联的示例显示在以下代码段中:
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1")
.setShortLabel("Web site")
.setLongLabel("Open the web site")
.setIcon(Icon.createWithResource(context, R.drawable.icon_website))
.setIntent(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://www.mysite.example.com/")))
.build();
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut)
跟踪快捷方式使用
要确定出现静态和动态快捷方式的情况,启动器将检查快捷方式的激活历史记录。你可以跟踪当用户通过调用完成你的应用程序中的具体行动reportShortcutUsed()方法,传递快捷的ID,当发生以下任一事件:
- 用户选择具有给定ID的快捷方式。
- 用户打开应用程序,并手动完成对应于同一快捷方式的操作。
禁用快捷方式
由于用户可以将您应用的任何快捷方式固定到设备的启动器,因此这些固定的快捷方式可能会将用户引导到您的应用中过期或不再存在的操作。 为了解决这种情况,您可以禁用您不希望用户通过调用选择动态快捷键disableShortcuts()它删除指定的动态快捷键和禁用这些动态的快捷键已固定的任何副本。 你也可以使用一个重载的版本这个方法来定义当用户尝试启动禁用动态快捷方式,应该会出现一个错误消息。
注意:如果您删除一些您的应用程序的快捷方式的静态的,当你更新你的应用程序时,系统会自动禁用这些快捷方式。
测试快捷键
要测试您应用的快捷方式,请在包含支持快捷方式的启动器的设备上安装您的应用。 然后,您应该能够执行以下操作:
- 长按应用程式启动器图示,即可查看您为应用程式定义的捷径。
- 点按并拖动快捷方式将其固定到设备的启动器。
您可以使用这些交互来测试添加,更新,禁用和删除快捷方式的效果。
分配多个意图
当使用创建快捷方式ShortcutInfo.Builder,您可以使用setIntents()而不是setIntent() 通过调用setIntents()你可以当用户选择快捷方式,将所有但最后活动在列表中你的应用程序中启动多个活动回堆栈 。 如果用户决定按下设备的返回按钮,则用户会在您的应用中看到另一个活动,而不是返回到设备的启动器。
速率限制
当使用setDynamicShortcuts() addDynamicShortcuts()或updateShortcuts()方法,记住,你可能只能目前在调用这些方法的特定次数在后台的应用程序 ,应用程序没有活动或服务前景。 在生产环境中,您可以通过将应用程序置于前台来重置此速率限制。
如果您遇到速度开发或测试期间限制,您可以选择开发人员选项>重置从设备的设置ShortcutManager限速 ,也可以在输入以下命令adb :
$ adb shell cmd shortcut reset-throttling [ --user your-user-id ]
备份还原
如果允许用户备份和包括更换设备时,恢复您的应用程序android:allowBackup="true"属性分配在应用程序的清单文件时,请只固定快捷方式自动恢复到设备的启动脑海。 此外,系统不会备份与固定快捷键相关联的图标,因此您应该将快捷方式的图片保存在应用程序中,以便轻松地在新设备上恢复这些图标。
系统会自动重新发布静态快捷键,但只有在用户在新设备上重新安装您的应用之后。 另一方面,动态快捷方式未备份,因此您必须在应用程序中包含逻辑,以便在用户在新设备上打开应用程序时重新发布它们,如以下代码段所示:
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShortcutManager shortcutManager =
getSystemService(ShortcutManager.class);
if (shortcutManager.getDynamicShortcuts().size() == 0) {
// Application restored. Need to re-publish dynamic shortcuts.
if (shortcutManager.getPinnedShortcuts().size() > 0) {
// Pinned shortcuts have been restored. Use
// updateShortcuts() to make sure they contain
// up-to-date information.
}
}
}
// ...
}
最佳实践
在设计和创建应用的快捷方式时,您应该遵循以下准则:
遵循快捷键设计指南
为了使您的应用程序的快捷方式在视觉上有用于系统的应用程序快捷方式一致,按照应用程序快捷方式设计准则 。
仅发布四个不同的快捷键
虽然API目前支持在任何给定时间为您的应用程序组合最多五个静态快捷方式和动态快捷方式,但建议您每次只发布四个不同的快捷方式,以提高快捷方式在启动器中的可视外观。
限制快捷方式描述长度
在启动器中显示应用快捷方式的菜单中,空间受到限制。 如果可能,将快捷方式的“简短说明”的长度限制为10个字符,并将“长说明”的长度限制为25个字符。
维护快捷方式和操作使用历史记录
对于您创建的每个快捷方式,请考虑用户可以在应用程序中直接完成相同任务的不同方式。 记得调用reportShortcutUsed()中的每个的这些情况下,以使发射器保持较快捷方式的操作的精确记录。
仅当保留其含义时更新快捷方式
当变化的动态快捷键,调用updateShortcuts()改变这种保留了其意义的快捷方式的信息,只有当。 否则,你应该使用addDynamicShortcuts()或setDynamicShortcuts()而不是创建一个代表了新的含义一个新的ID的快捷方式。
例如,如果您创建了用于导航到超市的快捷方式,则仅当超市的名称已更改但其位置保持不变时,才更新快捷方式是适当的。如果用户在不同的超市位置开始购物,那么最好创建一个新的快捷方式。
在备份和恢复期间不保留动态快捷方式
当设备进行备份和恢复操作时,不会保留动态快捷方式。 出于这个原因,我们建议您检查由返回的对象的数量getDynamicShortcuts()每次启动应用程序,并根据需要重新发布动态快捷键,如图所示中的代码片段备份和还原部分