1. 判断是否已经创建了快捷方式(在某些机型中需要判断)
1
2
3
4
5
6
7
8
9
10
11
12
13
private  boolean  hasShortcut()
{
boolean isInstallShortcut = false ;
final ContentResolver cr = activity.getContentResolver();
final String AUTHORITY = "com.android.launcher.settings" ;
final Uri CONTENT_URI = Uri.parse( "content://" +AUTHORITY + "/favorites?notify=true" );
Cursor c = cr.query(CONTENT_URI, new String[] { "title" , "iconResource" }, "title=?" ,
new String[] {mapViewActivity.getString(R.string.app_name).trim()}, null );
if (c!= null && c.getCount()> 0 ){
isInstallShortcut = true ;
}
return isInstallShortcut ;
}
  1. 创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/** 
* 为程序创建桌面快捷方式
*/
private void addShortcut(){
Intent shortcut = new Intent( "com.android.launcher.action.INSTALL_SHORTCUT" );

//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
shortcut.putExtra( "duplicate" , false ); //不允许重复创建

/****************************此方法已失效*************************/
//ComponentName comp = new ComponentName(this.getPackageName(), "."+this.getLocalClassName());
//shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));   
     /******************************end*******************************/
     Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
     shortcutIntent.setClassName( this , this .getClass().getName());
     shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

//快捷方式的图标
ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext( this , R.drawable.icon);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);

sendBroadcast(shortcut);
}
  1. 删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** 
* 删除程序的快捷方式
*/
private void delShortcut(){
Intent shortcut = new Intent( "com.android.launcher.action.UNINSTALL_SHORTCUT" );

//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
String appClass = this .getPackageName() + "." + this .getLocalClassName();
ComponentName comp = new ComponentName( this .getPackageName(), appClass);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));

sendBroadcast(shortcut);

}
  1. 声明权限

在AndroidManifest.xml 文件中声明 创建和删除快捷方式时声明权限

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