如何从其他应用程序启动应用程序?

时间:2013-04-19 12:45:46

标签: android system installed-applications

我想从我的应用程序启动所有已安装的应用程序。这是我获得所有已安装的应用程序

List<ApplicationInfo> applicationInfoList = packageManager.getInstalledApplications(PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA);
if(applicationInfoList != null && !applicationInfoList.isEmpty()){
    Collections.sort(applicationInfoList, new ApplicationInfo.DisplayNameComparator(
            packageManager));
    for (ApplicationInfo applicationInfo : applicationInfoList) {
        Intent intent = packageManager.getLaunchIntentForPackage(applicationInfo.packageName);
        if(intent != null){
            ComponentName componentName = intent.getComponent();
            //add componenet to a list
        }

    }
}

但我无法启动某些应用程序,如联系人和手机。这些应用程序的类名称为“ResolverActivity”。如何从我的应用程序启动这些应用程序?

先谢谢

2 个答案:

答案 0 :(得分:1)

这是因为“联系人”和“电话”与“地图”和“谷歌纵横”是相同的应用程序。他们恰好有多个可开展的活动。

所以,你有两个选择:

  1. 坚持您想要“启动所有已安装的应用程序”的声明,在这种情况下您的现有代码是正确的(用户将选择是否显示联系人或电话),或

  2. 执行主屏幕启动器的操作,即“启动所有可启动的活动”,在这种情况下,您将错误地进行操作

  3. 对于后者,请对queryIntentActivities() / MAIN LAUNCHER使用Intent,并使用结果来构建列表。 Here is a sample application证明了这一点。

答案 1 :(得分:0)

启动应用程序,您可以尝试这样做:

        // start the app by invoking its launch intent
        Intent i = getPackageManager().getLaunchIntentForPackage(applicationInfo.packageName);
        try {
           if (i != null) {
              startActivity(i);
           } else {
              i = new Intent(applicationInfo.packageName);
              startActivity(i);
           }
        } catch (ActivityNotFoundException err) {
           Toast.makeText(ListInstalledApps.this, "Error launching app", Toast.LENGTH_SHORT).show();
        }

请参阅:tutorial1tutorial2thread stackoverflow