下文转载至:点击打开链接
获得系统中所有的安装包信息
List<PackageInfo> packageList = this.getPackageManager().getInstalledPackages(0);
appList = new ArrayList<AppInfo>();
for(PackageInfo info : packageList){
CharSequence appName = info.applicationInfo.loadLabel(getPackageManager());
if(TextUtils.isEmpty(appName)){
appName = info.packageName;
}
//加上下面这个if条件就把系统自带的应用给过滤掉了,获取到的仅仅是我们自己安装的
if((info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)<=0){
ComponentName comp = getComponentName(info.packageName);
AppInfo appInfo = new AppInfo();
appInfo.icon = info.applicationInfo.loadIcon(getPackageManager());
appInfo.name = appName.toString();
appInfo.setActivity(comp, Intent.FLAG_ACTIVITY_NEW_TASK|
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
appList.add(appInfo);
}
}
程序中调用了getComponentName,其源码是:
private ComponentName getComponentName(String packageName) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage(packageName);
List<ResolveInfo> infoList = getPackageManager().queryIntentActivities(intent, 0);
if(infoList != null && infoList.size()>0){
ResolveInfo info = infoList.get(0);
if(info != null){
String pkgName = info.activityInfo.packageName;
String clsName = info.activityInfo.name;
return new ComponentName(pkgName, clsName);
}
}
return null;
}