1.场景
我们经常会看到在微信里面可以调用QQ客户端,在一个App里面通过点击事件打开手机里面已经安装的某个app,从而满足我们的各种需求
2.分析
一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名,然后通过packageName和className来启动另一个app.
在退出被打开的app后如果想回到之前的app,记得不要finish掉之前的app.
3.代码实现
/**
* 打开指定包名的app,这里的包名指的是app的主包名
*
* @param packageName 包名
*/
private void openApp(String packageName) {
PackageInfo pi = null;
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);
PackageManager pm = getPackageManager();
List<ResolveInfo> apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String getPackageName = ri.activityInfo.packageName;
String getClassName = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(getPackageName, getClassName);
intent.setComponent(cn);
startActivity(intent);
}
}
4.调用方式
//包名
String testPackageName = "com.miui.gallery";
openApp(testPackageName);
5.参考文档
http://www.oschina.net/question/229726_36557