Android(安卓)Shortcuts 为其他应用创建桌面快捷方式,替换图标等
16lz
2021-01-26
Android Shortcuts 为其他应用创建桌面快捷方式,替换图标等
shortcuts功能自android N_MR1(7.1,api 25)引入,使用ShortcutManager管理,
关于创建桌面图标pinned shortcuts是android O(8.0 api 26添加的,但是可以通过support包在低版本兼容)
- 在查看官方文档时发现有这么一段话
Note: See also the support library APIs, isRequestPinShortcutSupported() and requestPinShortcut(), which work on Android 7.1 (API level 25) and lower. The support library falls back to the deprecated EXTRA_SHORTCUT_INTENT extra to attempt the pinning process.
- 创建桌面快捷图标在安卓7.1之前可以通过support(android.support.v4.content.pm)包兼容
创建
直接看代码
class ShortcutIconBean{ @JsonName("name") private String name; @JsonName("packageName") private String packageName; @JsonName("iconPath") private String iconPath; } class xxx{ /**添加快捷方式 *@param shortcutInfoIntent 创建桌面图标以后点击的执行逻辑 * * */ private void addShortcut(Intent shortcutInfoIntent,ShortcutIconBean shortCut) { Bitmap bitmap = BitmapUtils.decodeFile(shortCut.getIconPath()); if (bitmap == null){ Log.i(TAG,"bitmap == null"); return; } String id = mThemeId + "-" + shortCut.getName() + "-" + System.currentTimeMillis(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { Log.i(TAG," Android O"); ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); ShortcutInfo info = new ShortcutInfo.Builder(this, id) .setIcon(Icon.createWithBitmap(bitmap)) .setShortLabel(shortCut.getName()) .setIntent(shortcutInfoIntent) .build(); Intent successCallback = new Intent(ACTION); /* //In your app's manifest file, add ACTION_CREATE_SHORTCUT to the activity's element. // 使用这个方式获取intent需要自己创建一个ACTIVITY管理创建成功回调,在ACTIVITY声明中加 ACTION_CREATE_SHORTCUT 过滤 Intent successCallback = shortcutManager.createShortcutResultIntent(info);*/ PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(this, 200, successCallback, PendingIntent.FLAG_UPDATE_CURRENT); shortcutManager.requestPinShortcut( info, shortcutCallbackIntent.getIntentSender()); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ ShortcutInfoCompat info = new ShortcutInfoCompat.Builder(this, id) .setIcon(IconCompat.createWithBitmap(bitmap)) .setShortLabel(shortCut.getName()) .setIntent(shortcutInfoIntent) .build(); Intent successCallback = new Intent(ACTION); //ACTION 处理创建结果的广播 PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(this, 200, successCallback, PendingIntent.FLAG_UPDATE_CURRENT); ShortcutManagerCompat.requestPinShortcut(this, info, shortcutCallbackIntent.getIntentSender());// 注释部分为发广播的实现方式,不在使用 /* Log.i(TAG," Android N"); Intent launcherIntent = new Intent(Intent.ACTION_MAIN); launcherIntent.setClass( this, JumpActivity.class); launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER); launcherIntent.putExtra("packageName",shortCut.getPackageName()); // Intent launcherIntent = new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS); Intent installer = new Intent(); //false标示不重复创建 installer.putExtra("duplicate", false); installer.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent); //设置应用的名称 installer.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortCut.getName()); //设置图标 Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, 128, 128, true); installer.putExtra(Intent.EXTRA_SHORTCUT_ICON,bitmap); installer.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); //发送安装桌面图标的通知 sendBroadcast(installer); Toast.makeText(this,"制作完成,请到桌面查看",Toast.LENGTH_SHORT).show();*/ } } }
版本判断然后执行不同代码,其实不同之处仅仅是将 ShortcutInfo 使用 ShortcutInfoCompat进行,
关于动态添加删除以及长按图标出现二级网上说得比较多
可参考shortcuts
更多相关文章
- Android中创建倒影效果的工具类
- [转]Android(安卓)Launcher 分析
- 如何为android创建icon?
- 创建自己的Repo Server
- FFmpeg编程开发笔记 —— Android(安卓)FFmpeg + SDL2.0简易播放
- android中webview接收favicon总是获取为null解决方案
- 【笔记】Android上ROS开发——android_core创建一个android应用
- Activity的启动模式以及Intent的七大属性
- 在Android(安卓)Studio创建第一个Android项目