/**
* 從該類獲取全部的應用信息
* 系統的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