【问题标题】:Filter out system package from a ListView从 ListView 中过滤掉系统包
【发布时间】:2012-07-23 18:22:51
【问题描述】:

如何在列表中使用此方法从列表中过滤掉系统包?

我目前有这个方法:

public static List<ApplicationInfo> getInstalledApplication(Context context) {
    PackageManager packageManager = context.getPackageManager();

    List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
    Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager));
    return apps;
}

过滤掉系统包的方法:

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

【问题讨论】:

  • 首先,三元运算符在那里没用。只需返回((ri.activityInfo.applicationInfo.flags&amp;ApplicationInfo.FLAG_SYSTEM)!=0。所以你有那个方法......很好。问题是……?
  • 但我需要返回系统包,但使用我的 collections.sort 方法
  • 比较器只知道如何根据您定义的顺序进行排序。为什么不发布您如何尝试删除这些项目的完整代码?

标签: android list listview filter system


【解决方案1】:

这将过滤掉系统包:

public static List<ApplicationInfo> getInstalledApplication(Context context) {
    PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> apps = packageManager.getInstalledApplications(0);
    Collections.sort(apps, new ApplicationInfo.DisplayNameComparator(packageManager));
    Iterator<ApplicationInfo> it = apps.iterator();
    while (it.hasNext()) {
        ApplicationInfo ai = it.next();
        if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            it.remove();
        }
    }
    return apps;
}

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多