/** * 这里需要通过权限去获取当前手机provider.authority,因为不同的手机厂商可能对原生的provider.authority进行了修改 * @param context * @param permission * @return */ private 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 (permission.equals(provider.readPermission)) return provider.authority; if (permission.equals(provider.writePermission)) return provider.authority; } } } } return null; }
通过上面的方法获取到provider.authority,在去判断是否已经创建了快捷方式
/** * 判断是否已有快捷方式,目前只对官方launcher有效 * * @param context * @return */ public static boolean hasShortcut(Context context) { boolean isInstallShortcut = false; try { final ContentResolver cr = context.getContentResolver(); String authority = getAuthorityFromPermission(context,"com.android.launcher.permission.READ_SETTINGS" ); if(authority==null){ isInstallShortcut = false; } final Uri CONTENT_URI = Uri.parse("content://" + authority + "/favorites?notify=true"); ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(CONTENT_URI, new String[] { "title", "iconResource" }, "title=?", new String[] { context.getString(R.string.sns_moji_scenery).trim() }, null); if (cursor != null && cursor.moveToFirst()) { cursor.close(); isInstallShortcut = true; } } catch (Exception e) { e.printStackTrace(); } return isInstallShortcut; }
参见:http://www.2cto.com/kf/201504/390384.htmlhttp://www.2cto.com/kf/201504/390384.html
http://www.360doc.com/content/15/1113/13/9200790_512821184.shtml