android桌面快捷方式csdn

来源:互联网 发布:arcgis有mac版吗 编辑:程序博客网 时间:2024/06/05 05:35
注意点:
不同手机对生成的快捷方式的识别不同,比如测试中(华为HUAWEI TIT-CL00与三星SM-G925F,小米手机)效果都是不一样的,测试出来结果为,华为每次都会提示快捷方式已存在(猜测:1.在安装应用时自动创建快捷方式;2.华为禁止代码生成快捷方式),由于华为应用和桌面一体,所以未能测出删除代码是否有效。三星则需要代码创建也支持代码删除。小米手机需要代码创建而且系统自带会提示用户是否要创建,而且系统会记录下你第一次启动app的操作,不会再提示,由于小米应用和桌面一体,所以未能测出删除代码是否有效。
/**
* 判断是否已添加快捷方式:
* 暂时没有方法能够准确的判断到快捷方式,原因是,
1、不同厂商的机型他的快捷方式uri不同,我遇到过HTC的他的URI是content://com.htc.launcher.settings/favorites?notify=true
2、桌面不只是android自带的,可能是第三方的桌面,他们的快捷方式uri都不同

提供一个解决办法,创建快捷方式的时候保存到preference,或者建个文件在SD卡上,下次加载的时候判断不存在就先发删除广播,再重新创建

* 添加权限:<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" ></uses-permission>

*/

因此可以根据需求进行选择,如果涉及节日做活动时需要改变桌面图标的,建议在第一次安装或者版本更新时运行以下两个方法:
public void isFirstJudge() {
//如果是第一次启动app,或者版本更新后需要启动引导页
if (myApp.spIsFirstStart.getBoolean("isFirst", true) || !myApp.spIsFirstStart.getString("localVersion", "null").equals(localVersion)) {
deleteShortCut();//删除快捷方式
createShortCut();//生成快捷方式
}}

/**
* 删除快捷方式
*/
public void deleteShortCut() {
Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
//快捷方式的名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
//在网上看到到的基本都是一下几句,测试的时候发现并不能删除快捷方式。
//String appClass = activity.getPackageName()+"."+ activity.getLocalClassName();
//ComponentName comp = new ComponentName( activity.getPackageName(), appClass);
//shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent(comp));
/**改成以下方式能够成功删除,估计是删除和创建需要对应才能找到快捷方式并成功删除**/
Intent intent = new Intent();
intent.setClass(this, getClass());
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
sendBroadcast(shortcut);
}

//创建桌面快捷方式
private void createShortCut() {
Intent intent = new Intent();
intent.setClass(this, this.getClass());
/*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
//创建快捷方式的Intent
Intent addShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
//是否允许重复创建
addShortcut.putExtra("duplicate", false);
//指定当前的Activity为快捷方式启动的对象: 如com.android.music.MusicBrowserActivity
//注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
//此方法创建快捷方式时没有问题,但是删除快捷方式时找不到对应的快捷方式
// ComponentName comp = new ComponentName(this.getPackageName(), "." + this.getLocalClassName());
// addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).setComponent (comp));

addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);//对应删除快捷方式
//设置快捷方式的图标
Intent.ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(this,
R.drawable.ic_launcher);//活动图标
// Intent.ShortcutIconResource icon = Intent.ShortcutIconResource.fromContext(baseFragActivity,
// R.drawable.ic_launcher);//原始图标
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
// 设置快捷方式的名字
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
sendBroadcast(addShortcut);
}

补:
测试中发现小米手机不管你在manifest中改了应用图标还是桌面图标,假如你在他们应用市场上上传了此应用,在联网的状况下,他都会同步为小米应用市场上的应用图标。
2 0
原创粉丝点击