1、
// 一般我们知道了另一个应用的包名和 MainActivity 的名字之后便可以直接通过如下代码来启动:
Intent intent = new Intent( Intent . ACTION_MAIN );
intent.addCategory( Intent . CATEGORY_LAUNCHER );
ComponentName cn = new ComponentName( packageName , className );
intent.setComponent(cn);
startActivity(intent);
2、
// 但是更多的时候,我们一般都不知道应用程序的启动 Activity 的类名,而只知道包名,我们可以通过 ResolveInfo 类来取得启动 Acitivty 的类名。
// 下面是实现代码:
PackageInfo pi = null ;
PackageManager pm = getPackageManager();
try {
pi = getPackageManager().getPackageInfo(packageName, 0 );
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent .ACTION_MAIN , null );
resolveIntent.addCategory(Intent .CATEGORY_LAUNCHER );
resolveIntent.setPackage(pi.packageName );
List<ResolveInfo > apps = pm.queryIntentActivities(resolveIntent, 0 );
ResolveInfo ri = apps.iterator().next();
if (ri != null ) {
String packageName1 = ri.activityInfo .packageName ;
String className = ri.activityInfo .name ;
Intent intent = new Intent(Intent .ACTION_MAIN );
intent.addCategory(Intent .CATEGORY_LAUNCHER );
ComponentName cn = new ComponentName(packageName1, className);
intent.setComponent(cn);
startActivity(intent);
}