启动应用程序的Activity总共有三种方式,如下:
1>通过包名得到将启动应用的入口Activity,然后给intent附上相应的属性即可.
示例代码
public static void startApp(final Context context, final String pkgname) {
PackageInfo pi = null;
try {
pi = context.getPackageManager().getPackageInfo(pkgname, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (pi == null) {
return;
}
Intent resolveIntent = new Intent(Intent.ACTION_MAIN);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setPackage(pkgname);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
ComponentName cn = new ComponentName(pkgname, className);
intent.addFlags(0x10000000);
intent.setComponent(cn);
context.startActivity(intent);
}
}
2>指定包名和想要入口的activity名
示例代码:
public static void startApp(final Context context, final String pkgname,final String activityName) {
ComponentName componetName = new ComponentName(pkgname,activityName);
try {
Intent intent = new Intent();
intent.setComponent(componetName);
context.startActivity(intent);
} catch (Exception e){
}
}
3>指定启动的Action
public static void startAppAction(final Context context,final String actionValue) {
Intent intent = new Intent(actionValue);
context.startActivity(intent);
}