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

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

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

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

  • Android:使用数组项填充列表视图
  • 如何在android中将HashMap转换为json数组?
  • 是否可以在Android中访问字符串数组项?
  • 获取jsonarray下每个元素的KEYS数组
  • 这里不允许使用Android,Java数组初始值设定项
  • RecyclerView中图像的奇怪行为
  • 如何从JSONArray中删除特定元素?
  • Android字符串数组,所有国家/地区使用不同语言
  • 我最近在做这样的事情。 我前面要说的一件事是确保在一个单独的线程中执行此操作 – 查询应用程序信息是否缓慢。 以下内容将为您提供所有已安装应用程序的列表。 这将包括许多您可能不感兴趣的系统应用程序。

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

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

     List installedApps = new ArrayList(); 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现在应该有您需要的完整应用程序列表。 希望这会有所帮助,但您可能需要修改逻辑,具体取决于您需要返回的应用程序。 再一次,它是缓慢的,但它只是你需要解决的问题。 如果您经常访问某些数据缓存,则可能需要在数据库中构建数据缓存。