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;
}