Android 创建桌面快捷方式研究

创建快捷方式本来是很简单的一件事件,代码网上一搜一大堆,但是你用后细心研究一下就会发现一个问题:

不是回到你返回桌面时正在运行的那个 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         //加上这句能避免启动新的 Activity
28         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     }

 

posted @ 2013-06-07 21:55  野生奥特曼2号  阅读(456)  评论(0编辑  收藏  举报