思路:

  Launcher为了应用程序能够定制自己的快捷图标,就注册了一个 BroadcastReceiver 专门接收其他应用程序发来的快捷图标定制信息。所以只需要根据该 BroadcastReceiver 构造出相对应的Intent并装入我们的定制信息,最后调用 sendBroadcast 方法就可以创建一个快捷图标了。

步骤:

  1. 创建快捷方式必须要有权限;
  2. 创建快捷方式的广播的 Intent 的 action 设置 com.android.launcher.action.INSTALL_SHORTCUT
  3. 删除快捷方式的广播的 Intent 的 action 设置 com.android.launcher.action.UNINSTALL_SHORTCUT
  4. 设置快捷方式的图片和名称等信息放在 Intent 中;

  需要添加的权限如下:

  1.    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  2. <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
  3. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
  4. <uses-permission android:name="com.android.launcher2.permission.READ_SETTINGS"/>
  5. <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS"/>

  核心代码为:

  1.   /**
  2. * 添加当前应用的桌面快捷方式
  3. *
  4. * @param context
  5. */
  6. public static void addShortcut(Context context, int appIcon) {
  7. Intent shortcut = new Intent(
  8. "com.android.launcher.action.INSTALL_SHORTCUT");
  9.  
  10. Intent shortcutIntent = context.getPackageManager()
  11. .getLaunchIntentForPackage(context.getPackageName());
  12. shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
  13. // 获取当前应用名称
  14. String title = null;
  15. try {
  16. final PackageManager pm = context.getPackageManager();
  17. title = pm.getApplicationLabel(
  18. pm.getApplicationInfo(context.getPackageName(),
  19. PackageManager.GET_META_DATA)).toString();
  20. } catch (Exception e) {
  21. }
  22. // 快捷方式名称
  23. shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
  24. // 不允许重复创建(不一定有效)
  25. shortcut.putExtra("duplicate", false);
  26. // 快捷方式的图标
  27. Parcelable iconResource = Intent.ShortcutIconResource.fromContext(context,
  28. appIcon);
  29. shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
  30.  
  31. context.sendBroadcast(shortcut);
  32. }
  33.  
  34. /**
  35. * 删除当前应用的桌面快捷方式
  36. *
  37. * @param context
  38. */
  39. public static void delShortcut(Context context) {
  40. Intent shortcut = new Intent(
  41. "com.android.launcher.action.UNINSTALL_SHORTCUT");
  42.  
  43. // 获取当前应用名称
  44. String title = null;
  45. try {
  46. final PackageManager pm = context.getPackageManager();
  47. title = pm.getApplicationLabel(
  48. pm.getApplicationInfo(context.getPackageName(),
  49. PackageManager.GET_META_DATA)).toString();
  50. } catch (Exception e) {
  51. }
  52. // 快捷方式名称
  53. shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
  54. Intent shortcutIntent = context.getPackageManager()
  55. .getLaunchIntentForPackage(context.getPackageName());
  56. shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
  57. context.sendBroadcast(shortcut);
  58. }
  59.  
  60. /**
  61. * 判断当前应用在桌面是否有桌面快捷方式
  62. *
  63. * @param context
  64. */
  65. public static boolean hasShortcut(Context context) {
  66. boolean result = false;
  67. String title = null;
  68. try {
  69. final PackageManager pm = context.getPackageManager();
  70. title = pm.getApplicationLabel(
  71. pm.getApplicationInfo(context.getPackageName(),
  72. PackageManager.GET_META_DATA)).toString();
  73. } catch (Exception e) {
  74.  
  75. }
  76.  
  77. final String uriStr;
  78. if (android.os.Build.VERSION.SDK_INT < 8) {
  79. uriStr = "content://com.android.launcher.settings/favorites?notify=true";
  80. } else if (android.os.Build.VERSION.SDK_INT < 19) {
  81. uriStr = "content://com.android.launcher2.settings/favorites?notify=true";
  82. } else {
  83. uriStr = "content://com.android.launcher3.settings/favorites?notify=true";
  84. }
  85. final Uri CONTENT_URI = Uri.parse(uriStr);
  86. final Cursor c = context.getContentResolver().query(CONTENT_URI, null,
  87. "title=?", new String[]{title}, null);
  88. if (c != null && c.getCount() > 0) {
  89. result = true;
  90. }
  91. return result;
  92. }

Android 添加、移除和判断 桌面快捷方式图标的更多相关文章

  1. C#项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标

    #项目打包后安装的桌面快捷方式图标怎么设置成自己想要的图标 2012-08-25 09:11匿名 | 浏览 3286 次  C#编程 C#项目用vs2005自带的工具打包后安装的桌面快捷方式图标怎么设 ...

  2. Windows桌面快捷方式图标全部变成同一个图标的解决方法

    今天来个客人,说是电脑的所有程序打开都变成 Adobe Reader 了,打开看了下,刚开始是以为EXE文件关联被修改了,用注册表修复工具弄了下,重启电脑,还是老样子.仔细看了下,原来只是快捷方式变成 ...

  3. Android桌面快捷方式那些事与那些坑

    原文来自http://blog.zanlabs.com/2015/03/14/android-shortcut-summary/ 将近二个多月没写博客了.之前一段时间一直在搞红包助手,就没抽时间写博客 ...

  4. 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...

  5. Android添加快捷方式(Shortcut)到手机桌面

    Android添加快捷方式(Short)到手机桌面 权限 要在手机桌面上添加快捷方式,首先需要在manifest中添加权限. <!-- 添加快捷方式 --> <uses-permis ...

  6. Android开发被添加到桌面快捷方式

    Android开发被添加到桌面快捷方式 对于一个希望拥有很多其它用户的应用来说.用户桌面能够说是全部软件的必争之地,假设用户在手机桌面上建立了该软件的快捷方式.用户将会更频繁地使用该软件. 因此,全部 ...

  7. Android 添加桌面快捷方式操作

    /** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent(“com.android.launcher. ...

  8. (转)Android创建桌面快捷方式两种方法

    [IT168技术]Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还 ...

  9. Android 点击桌面快捷方式和Notifycation跳转到Task栈顶Activity

    我们一般下载的应用在第一次启动应用的时候都会给我创建一个桌面快捷方式,然后我在网上找了些资料整理下了,写了一个快捷方式的工具类,这样我们以后要创建快捷方式的时候直接拷贝这个类,里面提供了一些静态方法, ...

随机推荐

  1. mac tree命令

    mac下默认是没有 tree命令的,不过我们可以使用find命令模拟出tree命令的效果,如显示当前目录的 tree 的命令: $ find . -print | sed -e 's;[^/]*/;| ...

  2. git指令

    返回当前目录路径: $ pwd 1.1 git add git add . #将文件先暂存到staging area, stages new and modified, without deleted ...

  3. 谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

    最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在jav ...

  4. 对DataTable里数据进行排序

    在日常开发过程中,有一个DataTable集合,里面有很多字段,现在要求针对某一列进行排序,如果该列为数字的话,进行ASC即可实现,但是该字段类型为string,此时排序就有点不正确了. 我也不多废话 ...

  5. Java web 项目 tomcat部署方式.

    本地做Java Web项目的时候常常会用到tomcat部署测试的问题, 这里介绍项目的部署方法: 1,配置文件的形式: 例如: 你的项目目录为:f:\workspaces\MyProject,此时使用 ...

  6. BZOJ_1020_[SHOI2008]_安全的航线flight_(计算几何+二分)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1020 给出一条航线(折线),给出\(c\)个陆地(多边形).求航线上距离陆地的最近距离最远的距 ...

  7. C#String与string大小写的区别

    string是c#中的类 String是.net Framework的类 用string需要通过再次编译,所以直接用String速度会更快··· string是关键字,而String不是··· str ...

  8. Android handler Thread 修改UI Demo

    /********************************************************************** * Android handler Thread 修改U ...

  9. 一滴一点vim(学习+备忘)

    普通模式: h j k l 分别是左下上右方式移动: :w 保存修改 :q 推出 :wq 保存修改并退出 :q! 放弃修改强制推出 x 删除光标所在位置字符 i 在光标所以位置插入字符 删除类命令: ...

  10. FZU2150 Fire Game BFS搜索

    题意:就是选两个点出发,只能走草坪,看能不能走完所有的草坪 分析:由于数据范围很小,所有枚举这两个点,事先将所有的草坪点存起来,然后任选两个点走,(两个点可以是同一个点) 然后BFS就行了 注:无解的 ...