模仿添加QQ好友桌面快捷方式

 1 /**
 2      * 
 3      * @param context
 4      * @param tname 桌面快捷方式的名字
 5      * @param icon 好友头像
 6      */
 7     public static void addShortCut(Context context, String tname, int icon) {
 8         // 安装的Intent  
 9         Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
10 
11         // 快捷名称  
12         shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, tname);
13         // 快捷图标是允许重复
14         shortcut.putExtra("duplicate", false);
15 
16         Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
17         shortcutIntent.putExtra("tName", tname);
18         shortcutIntent.setClassName("com.example.qqshortcut", "com.example.qqshortcut.MainActivity");
19         shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
20         shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
21 
22         // 快捷图标  
23         ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(context, icon);
24         shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
25 
26         // 发送广播  
27         context.sendBroadcast(shortcut);
28     }
 1 /**
 2      * 判断是否已存在该快捷方式
 3      * @param context
 4      * @param name 快捷方式的名字
 5      * @return
 6      */
 7     public static boolean hasShortcut(Context context,String name)
 8     {
 9         String authority = getAuthorityFromPermission(context,"permission.READ_SETTINGS");
10         boolean isInstallShortcut = false;
11         try {
12             ContentResolver cr = context.getContentResolver();
13             String url;
14             if (authority == null) {
15                 int systemversion = Integer.parseInt(android.os.Build.VERSION.SDK); 
16                 /*大于8的时候在com.android.launcher2.settings 里查询(未测试)*/ 
17                 if(systemversion < 8){ 
18                     url = "content://com.android.launcher.settings/favorites?notify=true"; 
19                 }else{ 
20                     url = "content://com.android.launcher2.settings/favorites?notify=true"; 
21                 } 
22             }else{
23                 url = "content://" + authority + "/favorites?notify=true";
24             }
25             Cursor c = cr.query(Uri.parse(url),null,"title=?",
26                     new String[] {name}, null);
27             if(c!=null && c.moveToFirst()){
28                 c.close();
29                 isInstallShortcut = true ;
30             }
31         } catch (Exception e) {
32             e.printStackTrace();
33         }
34         return isInstallShortcut ;
35     }
 1 /**
 2      * 动态获取查询的provider(provider跟SDK版本和厂商有关系,会有所不同),获取provider后,记得在androidManifeset.xml加上对应的权限
 3      * 不同厂商com.android.launcher.permission.READ_SETTINGS权限不同,目前做兼容只能把目前知道的权限都加到配置文件里
 4      * @param context
 5      * @param permission
 6      * @return
 7      */
 8     public static String getAuthorityFromPermission(Context context, String permission){
 9         try {
10             if (permission == null) return null;
11             List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
12             if (packs != null) {
13                 for (PackageInfo pack : packs) { 
14                     ProviderInfo[] providers = pack.providers; 
15                     if (providers != null) { 
16                         for (ProviderInfo provider : providers) {
17                             Log.e("------", "
【" + provider.readPermission + "】
");
18                             if (provider.readPermission!=null && provider.readPermission.endsWith(permission)) {
19                                 return provider.authority;
20                             }
21                         } 
22                     }
23                 }
24             }
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28         return null;
29     }
原文地址:https://www.cnblogs.com/kelina2mark/p/4522934.html