Android 计算已安装应用的大小
一、方法一
// 获取PackageManager实例
PackageManager pm = context.getPackageManager();
try {
// 获取ApplicationInfo
ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
// 获取应用大小(APK文件大小)
long apkSize = new File(appInfo.sourceDir).length();
// 获取数据大小(需要API 26+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
long dataSize = new File(appInfo.dataDir).length();
long totalSize = apkSize + dataSize;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
二、方法二
对于Android 8.0 (API 26)及以上版本,可以使用更精确的StorageStatsManager:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
StorageStatsManager storageStatsManager =
(StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);
try {
StorageStats stats = storageStatsManager.queryStatsForUid(
StorageManager.UUID_DEFAULT,
appInfo.uid
);
long appSize = stats.getAppBytes();
long dataSize = stats.getDataBytes();
long cacheSize = stats.getCacheBytes();
long totalSize = appSize + dataSize + cacheSize;//单位byte
} catch (IOException e) {
e.printStackTrace();
}
}
相关权限添加
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />