通过Intent.CATEGORY_LAUNCHER筛选出包含launcher的桌面应用列表,在所有的应用列表applicationInfos中匹配,成功,则放入appInfos中。
public List<AppInfo> queryFilterAppInfo() {
pm = context.getPackageManager();
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// 通过getPackageManager()的queryIntentActivities方法遍历,得到所有能打开的app的packageName
List<ResolveInfo> resolveinfoList = pm.queryIntentActivities(resolveIntent, 0);
Set<String> allowPackages=new HashSet();
for (ResolveInfo resolveInfo:resolveinfoList){
allowPackages.add(resolveInfo.activityInfo.packageName);
}
debug("allowPackages = " + allowPackages);
// 查询所有已经安装的应用程序,GET_UNINSTALLED_PACKAGES代表已删除,但还有安装目录的
List<ApplicationInfo> applicationInfos = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
List<AppInfo> appInfos = new ArrayList<AppInfo>();
for (ApplicationInfo info : applicationInfos) {
if (allowPackages.contains(info.packageName)){
AppInfo appInfo = new AppInfo();
//获取应用的名称
String app_name = info.loadLabel(pm).toString();
appInfo.setApp_name(app_name);
//获取应用的包名
String packageName = info.packageName;
appInfo.setPackagename(packageName);
appInfos.add(appInfo);
}
}
debug("appInfos = " + appInfos);
return appInfos;
}