Android中 一个应用启动另外一个应用一般有2种情况,
被启动应用的包名已知 和 未知两种情况:
1 被启动应用的包名已知:
/**启动另外应用的代码,其中被启动的应用的包名为packageName,
应用的入口为packageName.MainActivity,
此方法的2个应用的AndroidManifest.xml文件都不需要修改
**/
Intent intent = new Intent();
intent.setComponent(new ComponentName("packageName","packageName.MainActivity"));
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
2 被启动应用的包名未知:
这种情况虽然是不知道应用的包名,但是最终启动应用还是通过包名启动。所以要通过一种方法获得手机内应用的包名。
手机内分系统预装应用和非系统自己安装的应用,可以通过下边的方法判断,返回一个包名的List集合:
public List<PackageInfo> getAllApps() {
List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager packageManager = this.getPackageManager();
//获取手机内所有应用
List<PackageInfo> paklist = packageManager.getInstalledPackages(0);
for (int i = 0; i < paklist.size(); i++) {
PackageInfo pak = (PackageInfo) paklist.get(i);
//判断是否为非系统预装的应用 (大于0为系统预装应用,小于等于0为非系统应用)
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
apps.add(pak);
}
}
return apps;
}
由于这是个包名的List集合:我们仍不能确定我们要启动的应用是哪个,没关系,我们还可以进一步获取应用名。
public String[] launchApp() {
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packages = getAllApps();
str3=new String[packages.size()];
PackageInfo pa = null;
for(int i=0;i<packages.size();i++){
pa = packages.get(i);
//获得应用名。这里的str3是我定义的一个数组,承载应用名。
str3[i] = packageManager.getApplicationLabel(pa.applicationInfo).toString();
}
return str3;
}
最后可以根据我们要启动的应用名和String[]组数的每一项做判断。若为true,则启动应用,若为fause,则进行下一项判断。