Skip to content

Latest commit

 

History

History
75 lines (71 loc) · 2.48 KB

获取手机中所有安装的程序.md

File metadata and controls

75 lines (71 loc) · 2.48 KB

获取手机中所有安装的程序

  • 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;
}