1、知道了另一个应用的包名和MainActivity的名字:
Intent intent = new Intent();
ComponentName componentName = new ComponentName(packageName,className);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(componentName);
startActivity(intent);
2、不知道应用程序启动的Activity的类名,只知道包名,可以通过ResolveInfo类来获取启动的Acitivty的类名:
private void openApp(String packageName) {
PackageInfo pi = null;
try {
pi = getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
try {
resolveIntent.setPackage(pi.packageName);
} catch (NullPointerException e) {
// TODO: 未获取到相应包名
}
List<ResolveInfo> apps = getPackageManager().queryIntentActivities(
resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String appPackageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(appPackageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}