思路:

  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. 编程实现Windows关机、重启、注销

    要想编程使Windows关机.重启或者注销,可以使用ExWindowsEx这个API函数,该函数只有两个参数,第一个表示关机动作的标志,也就是你要让该函数关机呢,还是重启,还是注销等.可以使用EWX_ ...

  2. WordPress添加网站图标

    如何给WordPress添加网站图标_百度经验 http://jingyan.baidu.com/article/54b6b9c0d549622d583b4788.html   看到很多网站都带有ic ...

  3. Power Station POJ 4045

    题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小.如果这样的点有多个,则按升序依次输出. 树型dp #include <cstdio> #include <cstring ...

  4. HDU4908——BestCoder Sequence(BestCoder Round #3)

    BestCoder Sequence Problem DescriptionMr Potato is a coder.Mr Potato is the BestCoder.One night, an ...

  5. Android EditText控件行尾为表情时的BUG

    今天处理项目上的一个诡异BUG,贴吧Android客户端发贴框是支持表情文字混排的,但是当发贴框的行内容末尾为表情时,尝试在表情后插入文字,就悲剧了:文字其实写进去了,但是不会显示出来.研究了一下,发 ...

  6. 【HDOJ】4043 FXTZ II

    1. 题目描述有n个球,第i个球的伤害值为$2^i-1, i \in [1,n]$.有甲乙两个人,每次由甲选择n个球中的一个,用它以相同概率攻击自己或者乙,同时彻底消耗这个球.这样的攻击最多进行n次. ...

  7. 安装nging,php

    http://www.zihou.me/html/2010/11/14/2658.html http://www.linuxidc.com/Linux/2011-04/34964p4.htm http ...

  8. BZOJ3155: Preprefix sum

    题解: 写过树状数组搞区间修改和区间求和的就可以秒出吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath& ...

  9. 【原创】batch-GD, SGD, Mini-batch-GD, Stochastic GD, Online-GD -- 大数据背景下的梯度训练算法

    机器学习中梯度下降(Gradient Descent, GD)算法只需要计算损失函数的一阶导数,计算代价小,非常适合训练数据非常大的应用. 梯度下降法的物理意义很好理解,就是沿着当前点的梯度方向进行线 ...

  10. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...