在對手機軟件進行管理的時候,我們常常需要知道手機軟件的一些基本信息,如應用程序的類型、位置、uid等等,纔好作出相應的操作。
以下是獲取手機所有安裝軟件的關鍵代碼:
/**
* 應用程序信息的實體類
*/
public class AppInfo {
private Drawable icon;
private String name;
private String packname;
private boolean inRom;
private boolean userApp;
private int uid;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPackname() {
return packname;
}
public void setPackname(String packname) {
this.packname = packname;
}
public boolean isInRom() {
return inRom;
}
public void setInRom(boolean inRom) {
this.inRom = inRom;
}
public boolean isUserApp() {
return userApp;
}
public void setUserApp(boolean userApp) {
this.userApp = userApp;
}
@Override
public String toString() {
return "AppInfo [name=" + name + ", packname=" + packname + ", inRom="
+ inRom + ", userApp=" + userApp + "]";
}
}
/**
* 業務方法,提供手機裏面安裝的所有的應用程序信息
*/
public class AppInfoProvider {
/**
* 獲取所有的安裝的應用程序信息。
* @param context 上下文
* @return
*/
public static List<AppInfo> getAppInfos(Context context){
PackageManager pm = context.getPackageManager();
//所有的安裝在系統上的應用程序包信息。
List<PackageInfo> packInfos = pm.getInstalledPackages(0);
List<AppInfo> appInfos = new ArrayList<AppInfo>();
for(PackageInfo packInfo : packInfos){
AppInfo appInfo = new AppInfo();
//packInfo 相當於一個應用程序apk包的清單文件
String packname = packInfo.packageName;
Drawable icon = packInfo.applicationInfo.loadIcon(pm);
String name = packInfo.applicationInfo.loadLabel(pm).toString();
int flags = packInfo.applicationInfo.flags; //應用程序信息的標記 相當於用戶提交的答卷
int uid = packInfo.applicationInfo.uid; //操作系統分配給應用系統的一個固定的編號。一旦應用程序被裝到手機 id就固定不變了。
// File rcvfile = new File("/proc/uid_stat/"+uid+"/tcp_rcv");
// File sndfILE = new File("/proc/uid_stat/"+uid+"/tcp_snd");
appInfo.setUid(uid);
if((flags&ApplicationInfo.FLAG_SYSTEM)==0){
//用戶程序
appInfo.setUserApp(true);
}else{
//系統程序
appInfo.setUserApp(false);
}
if((flags&ApplicationInfo.FLAG_EXTERNAL_STORAGE)==0){
//手機的內存
appInfo.setInRom(true);
}else{
//手機外存儲設備
appInfo.setInRom(false);
}
appInfo.setPackname(packname);
appInfo.setIcon(icon);
appInfo.setName(name);
appInfos.add(appInfo);
}
return appInfos;
}
}