客户有在桌面上创建网页链接快捷方式的需求,以前做了一个APP有这个功能,今天试了一下,竟然不能用了。经查是7.1以下可以支持,8.0以上就不行了。于是全网查资料,还真不容易实现。好在google.cn的开发网有这个,记录一下,也方便新人。
创建固定快捷方式
在 Android 8.0(API 级别 26)及更高版本中,您可以创建固定快捷方式。与静态和动态快捷方式不同,固定快捷方式在受支持的启动器中显示为单独的图标。图 1 显示了这两类快捷方式之间的区别。
注意:当您尝试将快捷方式固定到受支持的启动器上时,用户会收到一个确认对话框,询问其是否允许固定该快捷方式。如果用户不允许固定该快捷方式,启动器会取消这一请求。
图 1.?应用快捷方式与固定快捷方式的外观
要将快捷方式固定到使用您的应用的受支持启动器上,请按顺序完成以下一系列步骤:
- 使用?
isRequestPinShortcutSupported() ?验证设备的默认启动器是否支持应用内固定快捷方式。 -
使用以下两种方式之一创建?ShortcutInfo ?对象,具体采用哪种方式取决于是否已存在相应快捷方式:
- 如果已存在相应快捷方式,请创建仅包含现有快捷方式 ID 的?
ShortcutInfo ?对象。系统会自动找到与该快捷方式相关的所有其他信息,并将其固定。 - 如果您要固定原本不存在的新快捷方式,请创建包含新快捷方式 ID、intent 和简短标签的?
ShortcutInfo ?对象。
注意:由于系统会自动对固定快捷方式执行备份和恢复操作,因此这些快捷方式的 ID 应包含稳定的常量字符串或服务器端标识符,而不是在本地生成的可能对其他设备毫无意义的标识符。 -
尝试通过调用?requestPinShortcut() ?将快捷方式固定到设备的启动器上。在此过程中,您可以传入一个?PendingIntent ?对象,用于仅在快捷方式成功固定后通知您的应用。 注意:如果用户不允许将快捷方式固定到启动器上,您的应用就不会收到回调。 快捷方式固定后,您的应用可以使用?updateShortcuts() ?方法更新其内容。如需了解详情,请参阅更新快捷方式。
以下代码段演示了如何创建固定快捷方式:
注意:ShortcutManager ?类的实例必须使用带有参数?ShortcutManager.class ?的?Context.getSystemService(Class) ?或带有参数?Context.SHORTCUT_SERVICE ?的?Context.getSystemService(String) ?来获取。
KotlinJava
ShortcutManager shortcutManager =
? ? ? ? context.getSystemService(ShortcutManager.class);
if (shortcutManager.isRequestPinShortcutSupported()) {
? ? // Assumes there's already a shortcut with the ID "my-shortcut".
? ? // The shortcut must be enabled.
? ? ShortcutInfo pinShortcutInfo =
? ? ? ? ? ? new ShortcutInfo.Builder(context, "my-shortcut").build();
? ? // Create the PendingIntent object only if your app needs to be notified
? ? // that the user allowed the shortcut to be pinned. Note that, if the
? ? // pinning operation fails, your app isn't notified. We assume here that the
? ? // app has implemented a method called createShortcutResultIntent() that
? ? // returns a broadcast intent.
? ? Intent pinnedShortcutCallbackIntent =
? ? ? ? ? ? shortcutManager.createShortcutResultIntent(pinShortcutInfo);
? ? // Configure the intent so that your app's broadcast receiver gets
? ? // the callback successfully.For details, see PendingIntent.getBroadcast().
? ? PendingIntent successCallback = PendingIntent.getBroadcast(context, /* request code */ 0,
? ? ? ? ? ? pinnedShortcutCallbackIntent, /* flags */ 0);
? ? shortcutManager.requestPinShortcut(pinShortcutInfo,
? ? ? ? ? ? successCallback.getIntentSender());
}
?
|