获取已安装的Android应用程序列表

时间:2011-05-28 23:33:42

标签: android arrays list install

您好我想获得用户设备上所有已安装的应用程序的列表我已经谷歌搜索时间最长但无法找到我想要的链接是最接近但工作正常除了我是新的don不懂如何使用方法getPackages();并用它创建一个列表

http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon

关于如何创建实际列表的任何帮助将是一个主要帮助我已经拥有所有代码只是无法获得列表实际显示感谢任何帮助

1 个答案:

答案 0 :(得分:62)

我最近在做这样的事情。我前面要说的一件事是确保在一个单独的线程中执行此操作 - 查询应用程序信息是否缓慢。以下内容将为您提供所有已安装应用程序的列表。这将包括许多您可能不感兴趣的系统应用程序。

PackageManager pm = getPackageManager();
List<ApplicationInfo> apps = pm.getInstalledApplications(0);

要将其限制为仅限用户安装或更新的系统应用(例如地图,GMail等),我使用以下逻辑:

List<ApplicationInfo> installedApps = new ArrayList<ApplicationInfo>();

for(ApplicationInfo app : apps) {
    //checks for flags; if flagged, check if updated system app
    if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
        installedApps.add(app);
    //it's a system app, not interested
    } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        //Discard this one
    //in this case, it should be a user-installed app
    } else {
        installedApps.add(app);
    }
}

编辑:另外,要获取应用程序的名称和图标(这可能是最长的 - 我还没有对它进行任何真正的深入检查 - 使用此:

String label = (String)pm.getApplicationLabel(app);
Drawable icon = pm.getApplicationIcon(app);

installedApps现在应该有您需要的完整应用列表。希望这会有所帮助,但您可能需要修改逻辑,具体取决于您需要返回的应用程序。再一次,它是缓慢的,但它只是你需要解决的问题。如果您经常访问数据库,则可能需要在数据库中构建数据缓存。