android开发步步为营之49:创建APP桌面快捷方式
来源:互联网 发布:上海java培训班 编辑:程序博客网 时间:2024/06/11 19:15
网上参考过N多的资料,最后发现还是这样写比较靠谱,不会重复创建快捷方式。
/*
* 为程序创建桌面快捷方式
*
* 同时需要在manifest中设置以下权限: <uses-permission
* android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
*/
private void addShortcut(Context cx) {
if (hasShortCut(cx) == false) {
try {
Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//有些品牌比如htc的手机使用另外一种方式会重复创建快捷方式
String brand = android.os.Build.BRAND;
if (brand.indexOf("htc") != -1) {
Intent intent = new Intent(this, AppHomeActivity.class);
intent.setAction("com.avazu.lockscreen.ui.activity.AppHomeActivity");
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
}else {
Intent shortcutIntent = cx.getPackageManager().getLaunchIntentForPackage(AppHomeActivity.this.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);
//sharepreference里面判断
PrefMgr.setBoolean(PrefKey.HAS_CREATE_SHORT_CUT, true);
} catch (Exception e) {
if (e != null) {
Log.e("hasShortCut", e.getMessage());
}
}
}
}
//删除快捷方式
private void delShortcut(){
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
//这里的intent要和创建时的intent设置一致
Intent intent = new Intent(this,HomeActivity.class);
intent.setAction("com.figo.activity.home");
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
sendBroadcast(shortcut);
}
补充,检查是否已经创建快捷方式,这个方法还是不太靠谱,很多手机不支持,最好还是自己存储,放在sharepreference里面
public boolean hasShortCut(Context cx) {
//改成自己使用sharePreference
return PrefMgr.getBoolean(PrefKey.HAS_CREATE_SHORT_CUT, false);
// boolean result = false;
// // 获取当前应用名称
// String title = null;
// try {
// final PackageManager pm = cx.getPackageManager();
// title = pm.getApplicationLabel(pm.getApplicationInfo(cx.getPackageName(), PackageManager.GET_META_DATA)).toString();
//
// 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";
// }
// Uri uri1 = Uri.parse(uriStr);
// Cursor c1 = cx.getContentResolver().query(uri1, null, "title=?", new String[] { title }, null);
// if (c1 != null && c1.getCount() > 0) {
// result = true;
// } else {
// uriStr = getAuthorityFromPermission(AppHomeActivity.this, "com.android.launcher.permission.READ_SETTINGS") + "/favorites?notify=true";
// Uri uri2 = Uri.parse(uriStr);
// Cursor c2 = cx.getContentResolver().query(uri2, null, "title=?", new String[] { title }, null);
// if (c2 != null && c2.getCount() > 0) {
// result = true;
// }
// }
// } catch (Exception e) {
// if (e != null) {
// Log.e("hasShortCut", e.getMessage());
// }
// }
//
// return result;
}
private String getAuthorityFromPermission(Context context, String permission) {
if (permission == null)
return null;
List<PackageInfo> packs = context.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;
}
配置文件AndroidManifest.xml
权限记得加上
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
添加上intent-filter
<activity
android:name="com.figo.activity.HomeActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
<intent-filter>
<action android:name="com.figo.activity.home" />
</intent-filter>
</activity>
- android开发步步为营之49:创建APP桌面快捷方式
- 创建APP桌面快捷方式?
- android开发步步为营之14:App Widgets
- android开发时 桌面快捷方式的创建
- Android编程之创建桌面快捷方式
- Android学习之程序创建桌面快捷方式
- android 创建桌面快捷方式
- Android 创建桌面快捷方式
- android创建桌面快捷方式
- Android 创建桌面快捷方式
- android 创建桌面快捷方式
- Android 创建桌面快捷方式
- Android创建桌面快捷方式
- android 创建桌面快捷方式
- Android 创建桌面快捷方式
- Android 创建桌面快捷方式
- Android 创建桌面快捷方式
- Android:桌面创建快捷方式
- list iterator
- FontMetrics字体属性|Panit字体信息获取(笔记)
- PHP常用排序算法 冒泡排序 快速排序 插入排序
- register关键字在c语言和c++中的差异
- servlet开发三种,get请求和post请求的区别
- android开发步步为营之49:创建APP桌面快捷方式
- 好的代码
- Photoshop设计软件APP图标的30个技巧
- javascript函数的高级写法
- Python List 常用 API
- 数组冒泡排序
- 第13周 项目5-4 统计每个数字出现的次数
- ubuntu使用gtest单元测试框架
- 八讲:TF/MicroSD 卡的 SDHC 标准与Class 速度等级详解