/**
* 创建快捷方式
*/
private void createShortCut() {
// 桌面就没此快捷方式,否则桌面有此快捷方式
if (!hasShortCut(this)) {
Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");// action
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));// 快捷方式名字
intent.putExtra("duplicate", false); // 是否重复创建快捷方式
Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.launcher_icon);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);// icon
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
new Intent(getApplicationContext(), GeneratedClassUtils.get(SplashActivity.class))); // 启动界面
sendBroadcast(intent);// 发送广播
}
}
/**
* 判断是否已经存在快捷方式
*
* @param context
* @return
*/
private boolean hasShortCut(Context context) {
final String AUTHORITY = getAuthorityFromPermission("com.android.launcher.permission.READ_SETTINGS");
final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(CONTENT_URI, null, "title=?", new String[] { context.getString(R.string.app_name) }, null);
if (cursor != null && cursor.moveToFirst()) {
cursor.close();
return true;
}
return false;
}
/**
* 根据权限来获取当前的AUTHORITY
*
* @param permission
* @return
*/
private String getAuthorityFromPermission(String permission) {
if (permission == null)
return null;
List<PackageInfo> packs = this.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
if (packs != null) {
for (PackageInfo pack : packs) {
ProviderInfo[] providers = pack.providers;
if (providers != null) {
for (ProviderInfo provider : providers) {
if (permission.equals(provider.readPermission))
return provider.authority;
if (permission.equals(provider.writePermission))
return provider.authority;
}
}
}
}
return null;
}
相关权限:
<!-- 创建快捷方式 -->
<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.WRITE_SETTINGS" />