创建快捷方式本来是很简单的一件事件,代码网上一搜一大堆,但是你用后细心研究一下就会发现一个问题:
不是回到你返回桌面时正在运行的那个 Activity 而是重新运行了你应用的第一个 Activity ,
这样显然是不可以的,网上苦苦搜寻半天千篇一律都没解决办法,于是研究 Logcat
首先从 Launcher 点击图标系统发出的 Intent 如下:
I/ActivityManager(564): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.freesky.sdkproxytestbed/.MainActivity} from pid 29805
再看看从自己创建的快捷方式发出的 Intent:
I/ActivityManager(564): START u0 {act=android.intent.action.MAIN flg=0x10200000 cmp=com.freesky.sdkproxytestbed/.MainActivity bnds=[216,203][376,403]} from pid 29805
仔细对比下是不是少了:cat=[android.intent.category.LAUNCHER]
所以你只需要加上这个 Category 就OK了,奉上代码!
1 private String getAppName() { 2 String appName = ""; 3 try { 4 PackageInfo info = this.getPackageManager().getPackageInfo( 5 this.getPackageName(), 0); 6 appName = getString(info.applicationInfo.labelRes); 7 } catch (NameNotFoundException e) { 8 } 9 10 return appName;11 }12 13 private int getAppIcon() {14 int appIcon = 0;15 try {16 PackageInfo info = this.getPackageManager().getPackageInfo(17 this.getPackageName(), 0);18 appIcon = info.applicationInfo.icon;19 } catch (NameNotFoundException e) {20 }21 return appIcon;22 }23 24 public void createShortCut(Activity app, String componetName, String appName, int icon) {25 ComponentName comp = new ComponentName(this.getPackageName(), this.getPackageName() + "." + this.getLocalClassName());26 Intent shortcutIntent = new Intent(Intent.ACTION_MAIN).setComponent(comp);27 //加上这句能避免启动新的 Activity28 shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);29 30 Intent intent = new Intent();31 32 intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);33 intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);34 35 ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(app, icon);36 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);37 // 不创建重复快捷方式38 intent.putExtra("duplicate", false);39 // 添加快捷方式40 intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");41 app.sendBroadcast(intent);42 }