/**
* 从该类获取全部的应用信息
* 系统的app都安装在:system/app目录下
* 用户应用都安装在:data/app目录下
*/
public class AppInfoProvider {
/**
* 获取安装在该手机的全部app信息,而且分好类(系统程序,用户程序)
* 信息:包名,图片,应用名,应用安装位置,应用类型
* @param context
* @return
*/
public static HashMap<String,ArrayList<AppInfo>> getAppInfos(Context context){
//获取应用管理者
PackageManager pm = context.getPackageManager();
//全部安装在手机上的应用程序包信息
List<PackageInfo> packInfos = pm.getInstalledPackages(0);
HashMap<String,ArrayList<AppInfo>> map=new HashMap<String, ArrayList<AppInfo>>();//放全部app信息
ArrayList<AppInfo> userList=new ArrayList<AppInfo>();//放用户程序
ArrayList<AppInfo> systemList=new ArrayList<AppInfo>();//放系统程序
for (PackageInfo packInfo : packInfos) {
//packageInfo 至关于一个应用程序apk包的清单文件
String packname=packInfo.packageName;//获取应用包名
//packInfo.applicationInfo至关于清单文件中的application
Drawable icon = packInfo.applicationInfo.loadIcon(pm);//获取应用图标
String name = packInfo.applicationInfo.loadLabel(pm).toString();//应用名称
//将获得的信息设置到自定义应用的封装类中
AppInfo app=new AppInfo();
app.setIcon(icon);
app.setName(name);
app.setPackname(packname);
//flags携带了不少种状态信息
int flags = packInfo.applicationInfo.flags;//应用程序信息的标记
if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) ==0){
app.setInRom(true);//安装在手机内存中
}else{
app.setInRom(false);//安装在外部存储
System.out.println("外部");
}
if((flags & ApplicationInfo.FLAG_SYSTEM)==0){
app.setUserApp(true);//用户程序
userList.add(app);
}else{
app.setUserApp(false);//系统程序
systemList.add(app);
}
}
map.put("用户程序", userList);
map.put("系统程序", systemList);
return map;
}
}app