Android应用添加(创建)和删除及判断是否存在桌面快捷方式

Android桌面程序提供了应用添加和删除桌面快捷方式的功能以及判断快捷方式是否存在,只要传入快捷方式标题、图标及点击快捷方式执行的应用Intent即可。代码如下:

1、Android添加桌面快捷方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * 为当前应用添加桌面快捷方式
 * 
 * @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删除桌面快捷方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * 删除当前应用的桌面快捷方式
 * 
 * @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判断应用是否已存在桌面快捷方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * 判断桌面是否已添加快捷方式
 * 
 * @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 (!= null && c.getCount() > 0) {
        result = true;
    }
    return result;
}

4、相关权限配置

1
2
3
<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" />

转载请注明地址: http://orgcent.com/android-add-del-shortcut-desktop/ | 萝卜白菜的博客

 

 

注意:

桌面快捷方式是保存在手机的 /data/data/com.android.launcher/databases/launcher.db 这个数据库文件下的favorites表中.

几个主要字段:

_id,

title,(快捷方式的名称)

intent,(快捷方式启动的对象)

screen,(快捷方式在哪个屏幕,默认是1)

cellX,cellY,(快捷方式的位置)

iconPackage,iconResource(快捷方式的图标)

另外低版本的SDK是用"content://com.android.launcher.settings/favorites?notify=true"来访问.

原文地址:https://www.cnblogs.com/firecode/p/2855768.html