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 ) ;
}
* 为当前应用添加桌面快捷方式
*
* @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 ) ;
}
* 删除当前应用的桌面快捷方式
*
* @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 ;
}
* 判断桌面是否已添加快捷方式
*
* @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" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />