Android创建桌面快捷方式

news/2024/11/25 17:21:51/
首先创建、删除快捷方式需要权限:
  1. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />  
  2. <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />  

推荐方案:

这个是我自己使用的方案,下面其他的是备选方案,万一这个有问题的,可以结合下面的方案做一下调整。
删除快捷方式可以根据需要取舍,Android的快捷方式一旦创建,如果新版本更新App图标,在覆盖安装的情况下是不会将之前创建的快捷方式图标更换成新图标的,除非手动删除再创建新的快捷方式,或者卸载App,否则这个快捷方式的图标是不会改变的,当需要保证图标是最新的又不需要用户手动操作,删除快捷方式的方法就派上用场了。
public class Utils {/*** 为程序创建桌面快捷方式* 与delShortcut是一套* @param context* @param clazz  启动Activity*/public static void addShortcut(Context context,Class<? extends Activity> clazz) {//此处是为了判断是否已经有了快捷方式if(Utils.hasShortCut(context)){return;}Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");// 快捷方式的名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,context.getString(R.string.app_name));shortcut.putExtra("duplicate", false); // 不允许重复创建Intent intent = new Intent(context, clazz);intent.setAction("android.intent.action.MAIN");intent.addCategory("android.intent.category.LAUNCHER");shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);// 快捷方式的图标ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher);shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);context.sendBroadcast(shortcut);}/*** 删除程序的快捷方式* @param context* @param clazz   启动Activity*/public static void delShortcut(Context context,Class<? extends Activity> clazz) {Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");// 快捷方式的名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,context.getString(R.string.app_name));Intent intent = new Intent(context, clazz);intent.setAction("android.intent.action.MAIN");intent.addCategory("android.intent.category.LAUNCHER");shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,intent);context.sendBroadcast(shortcut);}/*** 判断当前应用在桌面是否有桌面快捷方式* * @param context*/public static boolean hasShortCut(Context context) {try {Uri uri = null;String spermi = getAuthorityFromPermission(context,"com.android.launcher.permission.READ_SETTINGS");if (spermi == null) {return false;}if (getSystemVersion() < 8) {uri = Uri.parse("content://" + spermi+ "/favorites?notify=true");} else {uri = Uri.parse("content://" + spermi+ "/favorites?notify=true");}final ContentResolver cr = context.getContentResolver();Cursor cursor = cr.query(uri, null, "title=?", new String[] { context.getResources().getString(R.string.app_name) }, null);if (cursor != null && cursor.getCount() > 0) {cursor.close();return true;} else {return false;}} catch (Exception e) {return hasShortcut(context);}}public static String getAuthorityFromPermission(Context context,String permission) {if (permission == null)return null;List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if (packs != null) {for (PackageInfo pack : packs) {ProviderInfo[] providers = pack.providers;if (providers != null) {for (ProviderInfo provider : providers) {if (provider.readPermission != null) {if ((provider.readPermission).equals(permission)) {return provider.authority;}}}}}}return null;}public static int getSystemVersion() {return android.os.Build.VERSION.SDK_INT;}/*** 当读取桌面快捷方式权限有问题时,执行该方法判断* @param context* @return*/private static boolean hasShortcut(Context context) {try {boolean isInstallShortcut = false;Uri uri = null;if (getSystemVersion() < 8) {uri = Uri.parse("content://com.android.launcher.settings/favorites?notify=true");} else {uri = Uri.parse("content://com.android.launcher2.settings/favorites?notify=true");}Cursor c = context.getContentResolver().query(uri,new String[] { "title", "iconResource" }, "title=?",new String[] { context.getString(R.string.app_name).trim() },null);if (null != c && c.getCount() > 0) {isInstallShortcut = true;}return isInstallShortcut;} catch (Exception e) {return true;}}}

备选方案:

/*** 为程序创建桌面快捷方式*/private void addShortcut(){Intent intent = new Intent();intent.setAction("android.intent.action.MAIN");//使快捷方式和应用程序关联,卸载时可以一起卸载掉intent.setClass(this.getApplicationContext(), StartActivity.class);//表明程序启动的activityshortcut= new Intent("com.android.launcher.action.INSTALL_SHORTCUT");//快捷方式的名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));shortcut.putExtra("duplicate", false); //不允许重复创建shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);//快捷方式的图标ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);sendBroadcast(shortcut);}/*** 删除程序的快捷方式*/private void delShortcut(){Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");//快捷方式的名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));//指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer//注意: ComponentName的第二个参数必须是完整的类名(包名+类名),否则无法删除快捷方式String appClass = this.getPackageName() + "." +this.getLocalClassName();ComponentName comp = new ComponentName(this.getPackageName(), appClass);shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));sendBroadcast(shortcut);}




http://www.ppmy.cn/news/586723.html

相关文章

Android快捷方式解密

Android快捷方式解密 Android快捷方式作为Android设备的杀手锏技能&#xff0c;一直都是非常重要的一个功能&#xff0c;也正是如此&#xff0c;各种流氓App也不断通过快捷方式霸占着这样一个用户入口。 同时&#xff0c;各大国产ROM和Luncher的崛起&#xff0c;让这个桌面之…

deepinIDEA快捷方式无法启动解决

deepin的桌面上的IDEA快捷方式&#xff0c;启动无反应。原因是不是从官方商店下载的idea&#xff0c;因为官方的版本不是最新的&#xff0c;所以我下载的是最新版本的idea&#xff0c;解压在了自定义的盘里面。不知道什么原因打不开。 查看桌面快捷方式的代码如下&#xff1a;…

nvm无法生成文件快捷方式问题

在此记录: 在安装完成nvm后, 无法通过nvm use node版本, 生成node快捷方式; 原因是nvm的权限太低,需要使用管理员的方式执行

Android应用程序添加、删除快捷方式

最近项目需要做一个快捷方式&#xff0c;不是应用程序的快捷方式&#xff0c;而是应用程序某一个功能的快捷方式&#xff0c;比如金山电池的“快捷省电”桌面快捷方式&#xff0c;在做的过程中&#xff0c;遇到了一些问题&#xff0c;现在记录一下&#xff0c;万一有人和我碰到…

Android建快捷方式app,创建快捷方式最新版下载-创建快捷方式appv1.17 安卓版-腾牛安卓网...

创建快捷方式app是专为安卓手机用户制作的快捷方式创建工具,软件可以帮助用户轻松一键创建快捷方式,更便捷智慧使用手机,需要的朋友可以前来下载使用。 创建快捷方式app使用说明: 先选择一个应用,再选择应用里的活动,创建快捷方式。 每个界面中: 单击标题栏:回到顶部。…

Android应用快捷方式

有的App会给用户提供快捷方式&#xff0c;8.0之前我们多是通过发送com.android.launcher.action.INSTALL_SHORTCUT 广播的方式来实现。但在8.0的系统行为变更中指出&#xff0c;该广播变为私有的隐式广播&#xff0c;因此原来创建快捷方式的方法在8.0的系统上将不再有效&#x…

轻松彻底对付桌面无法删除的恶意IE快捷方式

轻松彻底对付桌面无法删除的恶意IE快捷方式 近日&#xff0c;同事、朋友不断问到同一个问题&#xff0c;桌面上突然出现了一个无法删除的与InternetExplorer“一模一样”的图标&#xff0c;也亲自处理了几台&#xff0c;症状表现为选中后按DEL无效&#xff0c;右键菜单中选删…

【转】[win7] 桌面IE快捷方式无法删除 解决办法

[win7] 桌面IE快捷方式无法删除 解决办法 WIN7:桌面多处很多IE的快捷方式或者就是IE图标&#xff0c;右键属性执行IE后面跟WW.XXXX.COM流氓网址&#xff0c;或者右键属性里面只有创建快捷方式等。无论用360安全卫士亦或其他软件都无法彻底删除&#xff0c;重启后又会出现。 问题…