获取手机中所有安装的程序:
PackageManger
包管理者封装了当前应用程序的所有信息,可以通过包管理者拿到当前应用程序的所有信息。PackageInfo
该类封装了应用程序清单文件中的所有信息。可以通过这个类拿到当前应用程序的版本
/**
* 返回应用程序的信息
*/
public static List<AppInfo> getAppinfos(Context context){
PackageManager pm = context.getPackageManager();
//如果后面想通过PackageInfo拿到每个程序的权限信息,那么这里getInstalledPackages的参数就必须是
//PackageManager.GET_PERMISSIONS,不然后面通过PackageInfo就无法得到应用程序清单中申请的权限
List<PackageInfo> packinfos = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS );
List<AppInfo> appinfos = new ArrayList<AppInfo>();
for(PackageInfo info : packinfos){
AppInfo appInfo = new AppInfo();
appInfo.setPackname(info.packageName);
appInfo.setVersion(info.versionName);
appInfo.setAppName(info.applicationInfo.loadLabel(pm).toString());
appInfo.setAppIcon(info.applicationInfo.loadIcon(pm));
if((info.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)==0){//通过这个来判断安装到了手机还是SD卡
appInfo.setInRom(true);
}else{
appInfo.setInRom(false);
}
//判断程序是不是系统程序
if(filterApp(info.applicationInfo)){
appInfo.setUserApp(true);
}else{
appInfo.setUserApp(false);
}
//获取到某个应用程序的全部权限信息.
String[] permissions = info.requestedPermissions;
if(permissions!=null && permissions.length>0){
for(String p: permissions){
if("android.permission.INTERNET".equals(p)){
appInfo.setUseNetwork(true);
}else if("android.permission.ACCESS_FINE_LOCATION".equals(p)){
appInfo.setUseGPS(true);
}else if("android.permission.READ_CONTACTS".equals(p)){
appInfo.setUseContact(true);
}
}
}
appinfos.add(appInfo);
appInfo = null;
}
return appinfos;
}
/**
* 该方法提供了用于判断一个程序是系统程序还是用户程序的功能。
* @param info
* @return true 用户自己安装的软件
* fasle 系统软件.
*/
public static 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;
}