在对手机软件进行管理的时候,我们常常需要知道手机软件的一些基本信息,如应用程序的类型、位置、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;
}
}