1. 程式人生 > >Android應用新增(建立)和刪除及判斷是否存在桌面快捷方式

Android應用新增(建立)和刪除及判斷是否存在桌面快捷方式

Android桌面程式提供了應用新增和刪除桌面快捷方式的功能以及判斷快捷方式是否存在,只要傳入快捷方式標題、圖示及點選快捷方式執行的應用Intent即可。程式碼如下:

/**
 * 為當前應用新增桌面快捷方式
 * 
 * @param cx
 * @param appName
 *            快捷方式名稱
 */
public static void addShortcut(Context cx) {
    Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");

    Intent shortcutIntent = cx.getPackageManager()
            .getLaunchIntentForPackage(cx.getPackageName());
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    // 獲取當前應用名稱
    String title = null;
    try {
        final PackageManager pm = cx.getPackageManager();
        title = pm.getApplicationLabel(
                pm.getApplicationInfo(cx.getPackageName(),
                        PackageManager.GET_META_DATA)).toString();
    } catch (Exception e) {
    }
    // 快捷方式名稱
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
    // 不允許重複建立(不一定有效)
    shortcut.putExtra("duplicate", false);
    // 快捷方式的圖示
    Parcelable iconResource = Intent.ShortcutIconResource.fromContext(cx,
            R.drawable.ic_launcher);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);

    cx.sendBroadcast(shortcut);
}

2、Android刪除桌面快捷方式

/**
 * 刪除當前應用的桌面快捷方式
 * 
 * @param cx
 */
public static void delShortcut(Context cx) {
    Intent shortcut = new Intent(
            "com.android.launcher.action.UNINSTALL_SHORTCUT");

    // 獲取當前應用名稱
    String title = null;
    try {
        final PackageManager pm = cx.getPackageManager();
        title = pm.getApplicationLabel(
                pm.getApplicationInfo(cx.getPackageName(),
                        PackageManager.GET_META_DATA)).toString();
    } catch (Exception e) {
    }
    // 快捷方式名稱
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
    Intent shortcutIntent = cx.getPackageManager()
            .getLaunchIntentForPackage(cx.getPackageName());
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    cx.sendBroadcast(shortcut);
}

3、Android判斷應用是否已存在桌面快捷方式

/**
 * 判斷桌面是否已新增快捷方式
 * 
 * @param cx
 * @param titleName
 *            快捷方式名稱
 * @return
 */
public static boolean hasShortcut(Context cx) {
    boolean result = false;
    // 獲取當前應用名稱
    String title = null;
    try {
        final PackageManager pm = cx.getPackageManager();
        title = pm.getApplicationLabel(
                pm.getApplicationInfo(cx.getPackageName(),
                        PackageManager.GET_META_DATA)).toString();
    } catch (Exception e) {
    }

    final String uriStr;
    if (android.os.Build.VERSION.SDK_INT < 8) {
        uriStr = "content://com.android.launcher.settings/favorites?notify=true";
    } else {
        uriStr = "content://com.android.launcher2.settings/favorites?notify=true";
    }
    final Uri CONTENT_URI = Uri.parse(uriStr);
    final Cursor c = cx.getContentResolver().query(CONTENT_URI, null,
            "title=?", new String[] { title }, null);
    if (c != null && c.getCount() > 0) {
        result = true;
    }
    return result;
}

4、相關許可權配置

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />