Androidはあるプログラムで別のプログラムを起動します


次の2つのケースがあります.
ケース1:
条件:パッケージ名とプログラムのメインエントリActivityコードは以下の通りです.
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);            
ComponentName cn = new ComponentName(packageName, className);            
intent.setComponent(cn);
startActivity(intent);

ケース2:
条件:パッケージ名コードは次のとおりです.
/**
 *   app
 * 
 * @param packageName     
 * @throws NameNotFoundException
 */
private void openApp(String packageName) throws NameNotFoundException {
    PackageManager pm = mCurActivity.getPackageManager();
    PackageInfo pi = pm.getPackageInfo(packageName, 0);

    Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
    resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    resolveIntent.setPackage(pi.packageName);

    List apps = pm.queryIntentActivities(resolveIntent, 0);

    ResolveInfo ri = apps.iterator().next();
    if (ri != null) {
        String pkgName = ri.activityInfo.packageName;
        String className = ri.activityInfo.name;

        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        ComponentName cn = new ComponentName(pkgName, className);

        intent.setComponent(cn);
        mCurActivity.startActivity(intent);
    }
}

まとめ:
   ,       。