1:首先声明权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
2:在启动页里面的onCreate方法(或其他合适的方法)中执行如下方法:
public void initShortCut() {
// intent发送隐式意图,去创建快捷方式
Intent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//不让重建
addIntent.putExtra("duplicate", false);
// 将应用的图标设置为Parceable类型
Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.icon_release);
// 点击图标之后的意图操作
Intent myIntent = new Intent(Intent.ACTION_MAIN);
myIntent.setClassName(this, getClass().getName());
// 设置快捷方式的名称
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "百度影音");
// 设置快捷方式的图标
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
// 设置快捷方式的意图
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, myIntent);
// 发送广播
sendBroadcast(addIntent);
}
3:但是上面的走完之后还有瑕疵就是每次点击快捷键进入都会发送创建快捷键的意图,虽然设置了不要重复创建,但是每次都弹出来已经创建过了的信息也是蛮让人不爽的,所以需要在发送意图前判断是否已经创建过图标了:
3.1:声明权限:
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
3.2方法:
//判断是否创建过了快捷方式 public static boolean isAddShortCut(Context context) { boolean isInstallShortcut = false; ContentResolver cr = context.getContentResolver(); String AUTHORITY = getAuthorityFromPermission(context, "com.android.launcher.permission.READ_SETTINGS"); final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true"); Cursor c = cr.query(CONTENT_URI, new String[]{"title"}, "title=?", new String[]{context.getString(R.string.app_name)}, null); if (c != null && c.getCount() > 0) { isInstallShortcut = true; } if (c != null) { c.close(); } return isInstallShortcut; } public static String getAuthorityFromPermission(Context context, String permission) { if (TextUtils.isEmpty(permission)) { return null; } List<PackageInfo> packInfos = context.getPackageManager().getInstalledPackages(GET_PROVIDERS); if (packInfos == null) { return null; } for (PackageInfo info : packInfos) { ProviderInfo[] providers = info.providers; if (providers != null) { for (ProviderInfo provider : providers) { if (permission.equals(provider.readPermission) || permission.equals(provider.writePermission)) { return provider.authority; } } } } return null; }