private void getAppTotalsizeO() { try { StorageStatsManager storageStatsManager = (StorageStatsManager) mContext.getSystemService(Context.STORAGE_STATS_SERVICE); StorageManager storageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); PackageManager pm = mContext.getPackageManager(); List<PackageInfo> packageInfos = pm.getInstalledPackages(0); if (checkUsagePermission()) { for (int i = 0; i < packageInfos.size(); i++) { PackageInfo info = packageInfos.get(i); ApplicationInfo ai = pm.getApplicationInfo(info.packageName, PackageManager.GET_META_DATA); // UUID uuid = storageManager.getUuidForPath(); UUID uuid = storageManager.UUID_DEFAULT; //通过包名获取uid int uid = getUid(mContext, info.packageName); StorageStats storageStats = storageStatsManager.queryStatsForUid(uuid, uid); //获取apk大小 long appSizeL = storageStats.getAppBytes() + storageStats.getCacheBytes() + storageStats.getDataBytes(); } } else { Intent intent = new Intent(Settings.INTENT_CATEGORY_USAGE_ACCESS_CONFIG); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, 2222); } } catch (Exception e) { e.printStackTrace(); } }
//检查权限 USAGE_ACCESS_SETTINGS
private boolean checkUsagePermission() { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { AppOpsManager opsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE); int mode = 0; mode = opsManager.checkOp("android:get_usage_stats", Process.myUid(), getPackageName()); boolean granted = mode == AppOpsManager.MODE_ALLOWED; if (!granted) { Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); startActivityForResult(intent, 1); return false; } } return true; }
现在获取的是所有的app,可以根据其他方法判断筛选出系统app和第三方app