android中获得所有安装的软件包信息。
public class AppManagerService {
private Context context;
private PackageManager packageManager;
public AppManagerService(Context context){
this.context = context;
packageManager = context.getPackageManager();
}
/**
* 获得所有安装在设备上的应用程序信息,并封装到AppInfo实体中
* @return
*/
public List<AppInfo> getAppInfos(){
List<AppInfo> appInfos = new ArrayList<AppInfo>();
// 获得所有安装在设备上的包
List<PackageInfo> infos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for(PackageInfo info : infos){
AppInfo appInfo = new AppInfo();
String packageName = info.packageName; // 包名
appInfo.setAppPackage(packageName);
ApplicationInfo applicationInfo = info.applicationInfo;
String name = applicationInfo.loadLabel(packageManager).toString(); // 应用程序名
appInfo.setAppName(name);
Drawable icon = applicationInfo.loadIcon(packageManager); // 应用程序图标
appInfo.setIcon(icon);
boolean isThreePart = filterApp(applicationInfo);
appInfo.setThreePart(isThreePart);
appInfos.add(appInfo);
}
return appInfos;
}
/**
* 判断某个应用程序是 不是三方的应用程序
* @param info
* @return
*/
public boolean filterApp(ApplicationInfo info) {
if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
return true;
} else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
return true;
}
return false;
}
}