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,则进行下一项判断。
时间: 2024-10-29 14:31:39