android查看桌面快捷方式是否存在

来源:互联网 发布:solaris与linux 编辑:程序博客网 时间:2024/05/17 03:00

在工作中遇到重复创建桌面快捷方式的图标BUG,本以为很简单。。确消耗了一下午的时间。其实大部分手机的桌面Authority都不是原生的了。所以需要找到本机的Authority

ps:如果手机中装有360桌面或者GO桌面的话cursor能获取到但是cursor.getCount()=0;应该是外部桌面干涉的。没有去深入了解。

/* *private static final String READ_SETTINGS = "com.android.launcher.permission.READ_SETTINGS" *通过传递launcher所需要的permisson来获取本机的authority,其中传递READ_SETTINGS到permisson中。 *com.android.launcher.permission.READ_SETTINGS 是android中的自带的,一般改系统不会涉及到此吧。。 **/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;}public static boolean hasShortCut(Context context) {String url = "";url = "content://" + getAuthorityFromPermission(context, READ_SETTINGS)+ "/favorites?notify=true";// 获取当前应用名称Log.i("url:", url);String title = null;try {final PackageManager pm = context.getPackageManager();title = pm.getApplicationLabel(pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA)).toString();} catch (Exception e) {}ContentResolver resolver = context.getContentResolver();Cursor cursor = resolver.query(Uri.parse(url), null, "title=?",new String[] { title }, null);if (cursor != null && cursor.getCount()>0) {cursor.close();return true;}return false;} 
原创粉丝点击