最近项目中遇到需要在桌面创建快捷方式,创建之前需要判断快捷方式是否存在,一般来说快捷方式的相关操作都需要用到launcher的一些权限,通过查询favorites表来判断是否已经有了这个快捷方式。
1.首先加入权限
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
2.由于Android的碎片化问题,所以第二步就是获取launcher的授权(此处理解为系统的Launcher.settings的包名)
private 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; }
3.现在就可以判断是否存在快捷方式
private boolean hasShortcut(Context cx) { boolean isAdded = false; ContentResolver cr = getContentResolver(); String authority = getAuthorityFromPermission(this.getApplicationContext(), "com.android.launcher.permission.READ_SETTINGS"); Uri contentUri = Uri.parse("content://"+authority+"/favorites?notify=true"); Cursor c = cr.query(contentUri, new String[] { "title", "iconResource" }, "title=?" , new String[] { getString(R.string.shotcut_name) }, null); if(c!=null && c.getCount()>0){ isAdded = true; } return isAdded; }
4.创建快捷方式
Intent addSC=new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); String title=getResources().getString(R.string.shotcut_name); Parcelable icon=Intent.ShortcutIconResource.fromContext(activity, R.drawable.ic_launcher_scan); Intent launcherIntent=new Intent(ScanQRActivity.this, ScanQRActivity.class); addSC.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); addSC.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); addSC.putExtra(Intent.EXTRA_SHORTCUT_INTENT,launcherIntent); sendBroadcast(addSC);
无回应:“Android创建快捷方式以及判断快捷方式是否已经存在”