androidʵÏÖqqÓÊÏä¶à¸öͼ±êЧ¹û
ǰ¼¸Ì죬µ°Ì۵ļ¼ÊõÖ÷¹Ü·ÇҪʵÏÖÀà似×°Ò»¸öqqÓÊÏ䣬Ȼºó¿ÉÒÔʹÓÃqqÓÊÏäÈÕÀúµÄÄÇôһ¸ö¶«Î÷£¬Ï൱ÓÚÒ»¸öÓ¦ÓÃÉú³ÉÁ½¸öͼ±ê£¬µ«ÊDz»Í¬µÄÊǵã»÷²»Í¬µÄͼ±ê¿ÉÒÔ½øÈ벻ͬµÄÓ¦Óã¬ÈçÏÂͼµÄЧ¹û¡£
<†·Ÿ"http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+1eLQp7n7sNm2yMHL0rvM7NKysrvWqrXAyOe6ztfFytajrNa7xNzX1Ly6uOOjrLfWz+3Su8/C19S8ur3ivvbV4rj2zsrM4rXEuf2zzKOstPO4xcrH1eLR+bXEPC9wPgo8cD4xLsrXz8i31s72wLTLtdX7uPbXwMPmbHVuY2hlcsrH0ru49mFjdGl2aXR5o6zL+dPQtcTNvLHqtrzKx9K7uPawtMWltvjS0aOsteO79828seq+zcrHteO799K7uPawtMWlyLu688il1rTQ0GFjdGl2aXR5PC9wPgo8cD4yLrLpv7RsYXVuY2hlciBmcmFtZXdvcmuy47XE1LS0+sLro6xodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9wYWNrYWdlcy9hcHBzL0xhdW5jaGVyLyYjNDM7L21hc3Rlci9zcmMvY29tL2FuZHJvaWQvbGF1bmNoZXIvTGF1bmNoZXIuamF2YSAgwre+tsrH1eK49qOssum/tL/Jzai5/betx72ho9XiwODG5Mq1us3U29fUvLrQtLXEwODSssO7ybbH+LHwLiAg0vLOqkxhdW5jaGVyyse8zLPQwcthY3Rpdml0ebXEPC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">public final class Launcher extends Activity implements View.OnClickListener, OnLongClickListenerÆä´ÎÎÒÃÇÖ»ÐèÒªÕÒµ½clickʼþ¾ÍÐУ¬ÔÚÕâÀïËû»áÅжϱ»µã»÷viewÊÇÎļþ¼Ð»¹ÊÇÓ¦ÓóÌÐò£¬
public void onClick(View v) { Object tag = v.getTag(); if (tag instanceof ApplicationInfo) { // Open shortcut final Intent intent = ((ApplicationInfo) tag).intent; startActivitySafely(intent); } else if (tag instanceof FolderInfo) { handleFolderClick((FolderInfo) tag); } }
½ÓÏÂÀ´¿´¿´startActivitySafely£¬ÆäʵÔÚÕâÀï¾ÍÊÇ´¦ÀíÁËÏÂÒì³£ºÍÌí¼Óһиöflag£¬µ«ÊÇflagÊÇÖØµã¡£½âÎöÀ´»á¼ÌÐøËµflag
void startActivitySafely(Intent intent) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { startActivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); } catch (SecurityException e) { Toast.makeText(this, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); e(LOG_TAG, "Launcher does not have the permission to launch " + intent + ". Make sure to create a MAIN intent-filter for the corresponding activity " + "or use the exported attribute for this activity.", e); } }ÕâÀïÆäʵ¶¼ºÜ¼òµ¥£¬¾ÍÊÇÌí¼ÓÒ»¸öflag£¬Õâ¸öflag×÷Óúܴó£¬×Ðϸ½²Ò»ÏÂ
FLAG_ACTIVITY_NEW_TASKÉèÖôË״̬£¬Ê×ÏÈ»á²éÕÒÊÇ·ñ´æÔںͱ»Æô¶¯µÄActivity¾ßÓÐÏàͬµÄÇ׺ÍÐÔµÄÈÎÎñÕ»£¨¼´taskAffinity£Èç¹ûÓÐÖ±½Ó°ÑÕâ
¸öÕ»ÕûÌåÒÆ¶¯µ½Ç°Ì¨£¬²¢±£³ÖÕ»ÖеÄ״̬²»±ä£¬¼´Õ»ÖеÄactivity˳Ðò²»±ä£¬Èç¹ûûÓУ¬Ôòн¨Ò»¸öÕ»À´´æ·Å±»Æô¶¯µÄactivity. Õâ¾ÍÊÇΪʲôÎÒÃǵã»÷home¼üÖºóÈ»ºóÔÙµã»÷ͼ±ê»á»Ö¸´µ½ÔÀ´µÄ״̬£¬¶ø²»ÊÇÖØÐÂÈ¥´´½¨Ò»¸öactivity¡£
ͨ¹ýÒÔÉϵķÖÎö´ó¸ÅÄÜʵÏÖÕâÑùµÄ¶«Î÷ÁË£¬ÏÖÔÚÎÒÖ»ÐèÒªÈÃËûÃÇÔËÐÐÔÚ²»Í¬µÄÈÎÎñÕ»ÀïÃæ¼´¿É£¬Ï໥ּ䲻Äܹ»Ó°Ïì¡£ÏÂÃæÊÇ´ó¸ÅʵÏÖµÄÁ÷³Ì£¬½ö¹²Î¿¼£¬ÒòΪÕâ¸öÖ»ÊÇ»ù´¡µÄÄ£ÐͶøÒÑ¡£Êµ¼ÊÉÏÎÒÃÇÔÚÀïÃæ¼ÓÁ˺ܶàÒµÎñ¡£
´ó¸ÅµÄ˼·¾ÍÕâÑùÒ»ÏÂÊÇ´úÂëµÄʵÏÖ¡£Ö÷ÒªÊÇ·ÅÈëÁËÒ»¸ö×ֶνÐ×öclassÈ»ºóµã»÷ͼ±êµÄʱºò»ñÈ¡Õâ¸ö×ֶΣ¬´ò¿ªÏàÓ¦µÄactivity¼´¿É
public class BootupActivity extends Activity { private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("BootupActivity", "OnCreate"); String className = getIntent().getStringExtra("Class"); if (className==null) { addShortcutToDesktop(BootupActivity.this.getString(R.string.shopping_app_name), R.drawable.shopping_ic_launcher, Activity1.class.getName(), Activity1.class); addShortcutToDesktop(BootupActivity.this.getString(R.string.xiaohua_app_name), R.drawable.xiaohua_ic_launcher, Activity2.class.getName(), Activity2.class); startAppProcess(Activity1.class.getName()); } else { startAppProcess(className); } } private void addShortcutToDesktop(String lable, int iconRes, String destClassName, Class bootupClass) { Intent shortcut = new Intent( "com.android.launcher.action.INSTALL_SHORTCUT"); // no rebuilding shortcut.putExtra("duplicate", false); // shortcut.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); // setting name shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, lable); // setting icon if (iconRes!=0) { shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, iconRes)); } // create a broadcast intent Intent intent = new Intent(this, bootupClass); intent.putExtra("Class", destClassName); intent.setAction(Intent.ACTION_MAIN); // setting intent shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); // send broadcast sendBroadcast(shortcut); } private void startAppProcess(String bootupClass) { ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); Intent i = new Intent(); i.setComponent(new ComponentName(this.getPackageName(), bootupClass)); i.putExtra("class", bootupClass); this.startActivity(i); }}
ÒÔÏÂÊÇÐèÒªÔÚÅäÖÃÎļþÀïÃæÅäÖõģ¬ÐèҪעÒâµ½µÃʱandroid:taskAffinityÕâ¸öÊôÐÔ£¬²»Í¬µÄactivityÐèÒªÅäÖò»Í¬µÄ¡£°ÑÖ÷ÒªµÄactivityºÍĬÈÏ´ò¿ªµÄactivityµÄÇ׺ÍÐÔÅäÖóÉÒ»ÑùµÃ¡£±£Ö¤µã»÷×ÀÃæÍ¼±êºÍÓ¦ÓÃͼ±êÄܹ»´ò¿ªÏàͬµÄÈÎÎñÕ»¡£È»ºó×¢Òâ°ÑÖ÷ÒªµÄBootupActivity·ÅÔÚµÚÒ»¸öλÖá£ÆäËûµÃ¶¼ÐèÒª¼ÓÉÏÒ»¸öaction²¢ÇÒºÍÖ÷ÒªµÄÏàͬ¡£