嗨,我想获取我一直在使用Google搜索时间最长的用户设备上所有已安装应用程序的列表,但找不到我想要的链接,尽管它是最近的并且可以正常工作,但我是新来的,不理解如何使用方法getPackages();并用它创建一个列表

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

关于如何创建实际列表的任何帮助将是主要的帮助,我已经拥有所有代码,只是无法让列表真正显示出对任何帮助的感谢

最佳答案

我最近正在做类似这样的事情。我首先要说的一件事是确定并在单独的线程中执行此操作-查询应用程序信息很慢。以下将为您提供所有已安装应用程序的列表。这将包括您可能不感兴趣的许多系统应用程序。

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

为了将其限制为仅由用户安装或更新的系统应用程序(例如Maps,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应该具有您需要的应​​用程序的完整列表。希望这会有所帮助,但是您可能需要根据返回的应用程序来稍微修改逻辑。同样,它很慢,但这只是您需要解决的问题。如果您经常要访问数据库,则可能需要在数据库中建立数据缓存。

07-24 09:47
查看更多