1

我想从我的应用程序中启动所有已安装的应用程序。在这里我获取所有已安装的应用程序

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”。我如何从我的应用程序启动这些应用程序?

提前致谢

4

2 回答 2

1

这是因为联系人和电话是同一个应用程序,地图和纵横也是。他们碰巧有多个可启动的活动。

所以,你有两个选择:

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

  2. 做主屏幕启动器所做的事情,即“启动所有可启动的活动”,在这种情况下你做错了

对于后者,使用queryIntentActivities()/ MAINLAUNCHER Intent并使用结果来构建您的列表。这是一个示例应用程序来演示这一点。

于 2013-04-19T12:54:22.107 回答
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

于 2013-04-19T12:57:02.743 回答