ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的< application>标签中收集到的,可获取应用程序启动Activity的name。
// 根据查询条件,查询特定的ApplicationInfo private List<AppInfo> queryFilterAppInfo(int filter) { pm = this.getPackageManager(); // 查询所有已经安装的应用程序 List<ApplicationInfo> listAppcations = pm .getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); // 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序 Collections.sort(listAppcations, new ApplicationInfo.DisplayNameComparator(pm));// 排序 List<AppInfo> appInfos = new ArrayList<AppInfo>(); // 保存过滤查到的AppInfo // 根据条件来过滤 switch (filter) { case FILTER_ALL_APP: // 所有应用程序 appInfos.clear(); for (ApplicationInfo app : listAppcations) { appInfos.add(getAppInfo(app)); } return appInfos; case FILTER_SYSTEM_APP: // 系统程序 appInfos.clear(); for (ApplicationInfo app : listAppcations) { if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { appInfos.add(getAppInfo(app)); } } return appInfos; case FILTER_THIRD_APP: // 第三方应用程序 appInfos.clear(); for (ApplicationInfo app : listAppcations) { //非系统程序 if ((app.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) { appInfos.add(getAppInfo(app)); } //本来是系统程序,被用户手动更新后,该系统程序也成为第三方应用程序了 else if ((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { appInfos.add(getAppInfo(app)); } } break; case FILTER_SDCARD_APP: // 安装在SDCard的应用程序 appInfos.clear(); for (ApplicationInfo app : listAppcations) { if ((app.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { appInfos.add(getAppInfo(app)); } } return appInfos; default: return null; } return appInfos; } // 构造一个AppInfo对象 ,并赋值 private AppInfo getAppInfo(ApplicationInfo app) { AppInfo appInfo = new AppInfo(); appInfo.setAppLabel((String) app.loadLabel(pm)); appInfo.setAppIcon(app.loadIcon(pm)); appInfo.setPkgName(app.packageName); return appInfo; }