【问题标题】:How to get installed packages using PackageManager?如何使用 PackageManager 获取已安装的软件包?
【发布时间】:2018-12-04 06:48:18
【问题描述】:

我想获取已安装应用程序的列表,但只有那些有图标且可启动的应用程序。我正在制作一个启动器应用程序并使用它:

  private List<AppList> getInstalledApps() {
    List<AppList> res = new ArrayList<AppList>();
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packs.size(); i++) {
        PackageInfo p = packs.get(i);
        if ((isSystemPackage(p) == false)) {
            String appName = p.applicationInfo.loadLabel(getPackageManager()).toString();
            Drawable icon = p.applicationInfo.loadIcon(getPackageManager());
            String package_name = p.applicationInfo.packageName;
            res.add(new AppList(appName, package_name, icon));
        }
    }

private boolean isSystemPackage(PackageInfo pkgInfo) {
    return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true : false;
}

问题是,要过滤掉不可启动的应用程序,我必须过滤掉系统应用程序,这不是最好的解决方案,因为它还会过滤掉这些应用程序:相机、日历、计算器等。

【问题讨论】:

  • 请不要这样更改您的问题,尤其是在发布答案之后。

标签: android


【解决方案1】:

您可以通过以下方式检查应用是否可以启动

packageManager.getLaunchIntentForPackage(packageName) != null

对于图标,你可以检查是否

info.loadIcon(packageManager) != null.

【讨论】:

  • 如何在我的列表视图适配器中设置
  • List pkgAppsList = getApplicationContext().getPackageManager().queryIntentActivities(mainIntent, 0);
猜你喜欢
  • 2011-10-06
  • 2011-02-05
  • 2021-12-13
  • 2013-12-15
  • 2016-08-03
相关资源
最近更新 更多