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

1、Android添加桌面快捷方式

/**
* 为当前应用添加桌面快捷方式
*
* @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" />

二、长按桌面弹出的桌面快捷方式创建

 

 

  第一页谈过直接在桌面生成快捷方式,现在说说如何在添加到一个SHORTCUTS列表中,就是你长按桌面弹出来的那个东东。

 

  首先在注册activity时,需要添加一个action为android.intent.action.CREATE_SHOERTCUT的intentFilter.如下所示:

  <activity android:name=ShortCutTest>

  <intent-filter>

  <action android:name=android.intent.action.CREATE_SHORTCUT/>

  <intent-filter>

  <activity>

 


  接下来就是就是设置快捷方式的图标、名称、事件等属性。这里图表的生成,android里提供了专门的方法来生成。

  public class ShortCutTest extends Activity{

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  // TODO Auto-generated method stub

  super.onCreate(savedInstanceState);

  public void createShortCut(){

  Intent addShortCut;

  //判断是否需要添加快捷方式

  addShortCut = new Intent();

  //快捷方式的名称

  addShortCut.putExtra(Intent.EXTRA_SHORTCUT_NAME , 我的快捷方式);

  //显示的图片

  Parcelable icon = ShortcutIconResource.fromContext(this, R.drawable.icon);

  addShortCut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

  //快捷方式激活的activity,需要执行的intent,自己定义

  addShortCut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent());

  //OK,生成

  setResult(RESULT_OK, addShortCut);

  }else{

  //取消

  setResult(RESULT_CANCELED);