Android动态创建快捷方式
一、 摘要
以Android O为分界,介绍两种动态创建快捷方式的途径:广播和ShortcutManager。
二、 Android O以前
在Android O(8.0)以前,动态创建快捷方式是通过发送广播实现的:
// 由该action可知,我们的创建快捷方式广播会由launcher,也就是系统桌面来接收public static final String ACTION_INSTALL_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";public void createShortcutBelowO(Context ctx, String name, Bitmap icon) { Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT); // 快捷方式的名字 shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); // 快捷方式的bitmap尽可能小,因为广播内容超过2MB会抛出异常 shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon); // 设置是否允许重复创建快捷方式,该选项非必填,默认是允许 shortcutIntent.putExtra("duplicate", false); // 快捷方式执行的intent,比如启动应用在AndroidManifest中配置的入口Activity Intent launchIntent = new Intent(); launchIntent.setClass(ctx, "com.zengyu.shortcutdemo"); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launchIntent); ctx.sendBroadcast(shortcutIntent);}
三、 Android O以后
Android O(8.0)新增了一个叫ShortcutManager的类:
/** * The ShortcutManager manages an app's shortcuts. Shortcuts provide users * with quick access to activities other than an app's main activity in the currently-active * launcher. For example, * an email app may publish the "compose new email" action, which will directly open the * compose activity. The {@link ShortcutInfo} class contains information about each of the * shortcuts themselves. */
ShortcutManager管理应用的快捷方式。快捷方式为用户提供了一个访问应用的快速渠道。ShortcutInfo类包含了每个快捷方式的信息。
在ShortcutManager的API文档中,其实已经有详细的静态创建和动态创建的介绍,以及创建的具体步骤,但在此我还是以一个简单的例子,直观地展示使用ShortcutManager动态创建:
public void createShortcutAboveO(Context ctx, String name, Bitmap icon) { ShortcutManager shortcutManager = (ShortcutManager) ctx.getSystemService(Context.SHORTCUT_SERVICE); /** * 判断是否支持该方式动态创建 */ if (shortcutManager.isRequestPinShortcutSupported()) { // 快捷方式执行的intent,比如启动应用在AndroidManifest中配置的入口Activity Intent launchIntent = new Intent(); launchIntent.setClass(ctx, "com.zengyu.shortcutdemo"); ShortcutInfo.Builder builder = new ShortcutInfo.Builder(context, pkg) .setShortLabel(name) .setIcon(Icon.createWithBitmap(icon)) .setIntent(launchIntent); /** * 第二个参数为弹出创建快捷方式确认框时的回调PendingIntent,此例不关注该回调,因此为null, * 如果需要监听该回调,需要自定义一个BroadcastReceiver,可参考参考文献中的例子 */ shortcutManager.requestPinShortcut(builder.build(), null); }}
其中isRequestPinShortcutSupported方法:
/** * Return {@code TRUE} if the app is running on a device whose default launcher supports * {@link #requestPinShortcut(ShortcutInfo, IntentSender)}. * * The return value may change in subsequent calls if the user changes the default launcher * app. * *
Note: See also the support library counterpart * {@link android.support.v4.content.pm.ShortcutManagerCompat#isRequestPinShortcutSupported( * Context)}, which supports Android versions lower than {@link VERSION_CODES#O} using the * legacy private intent {@code com.android.launcher.action.INSTALL_SHORTCUT}. * * @see #requestPinShortcut(ShortcutInfo, IntentSender) */
public boolean isRequestPinShortcutSupported() { try { return mService.isRequestPinItemSupported(injectMyUserId(), LauncherApps.PinItemRequest.REQUEST_TYPE_SHORTCUT); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); }}
判断设备是否支持ShortcutManager的这种方式动态创建快捷方式,如果Android版本低于Android O,使用“com.android.launcher.action.INSTALL_SHORTCUT”这个intent,即我们在上一节中使用的action。因此,如果这个方法返回false,我们应该仍使用广播的方式来动态创建。
四、 参考文献
- Android 8.0 快捷方式Shortcut
更多相关文章
- 更改android AVD模拟器创建路径位置
- 【Android】创建Popwindow弹出菜单
- Android仿微信发送语音消息动态提示,支持上滑取消发送
- android修改图片(修改图片大小,图片旋转,图片平移)
- Android(安卓)Apk自动更新service(直接拿来用)
- android 文件读写
- Android创建本地文件夹、创建本地文件以及访问本地文件
- Android开发者指南(3) —— Other Tools
- Android(安卓)学习笔记 BroadcastReceiver广播...