String path1 = Environment.getDataDirectory().getAbsolutePath(); Log.d(TAG, "path1: " + path1); //输出结果为: /data String path2 = Environment.getExternalStorageDirectory().getPath(); Log.d(TAG, "path2: " + path2); //输出结果为: /storage/emulated/0但是以上方法只能获得存储总量和剩余空间,无法直接获取系统占据的空间。 如果你想得到系统占据空间的具体数值,可以通过执行以下步骤进行自测: 步骤1:先获取出整个存储空间的总大小,和剩余空间的大小。
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); long availableBlocks = stat.getAvailableBlocks();步骤2:计算出系统空间占据的大小,具体求法为:总大小 - 剩余空间。
long totalSize = totalBlocks * blockSize; long availSize = availableBlocks * blockSize; //得出总空间bigger long totalSize = bigger - availSize;通过以上两个步骤,你就可以得出系统占据的空间大小了。因为不同设备的系统空间大小可能会有所不同,所以需要自行调试求解。
获取整个存储空间的总大小和剩余空间的大小。您可以使用StatFs类来获取这些信息。
计算出系统空间占据的大小。您可以使用总大小减去剩余空间大小来求得系统占据的空间大小。
我建议您使用以下步骤获取Android系统占用存储的具体大小:
1.使用adb shell命令查看 /system 分区的大小信息,以确定系统分区的总大小
adb shell df /system
输出格式:
Filesystem Size Used Free Blksize
/dev 919M 428K 919M 4096
/mnt/secure 919M 0K 919M 4096
/mnt/asec 919M 0K 919M 4096
/mnt/obb 919M 0K 919M 4096
/system 1024M 898M 126M 4096
/data 3669M 2023M 1646M 4096
/cache 490M 6M 484M 4096
/persist 24M 84K 24M 4096
/efs 128M 4M 123M 4096
/firmware 128M 8M 120M 4096
从上面的输出可以看出,/system 分区的总大小是1024M。
2.使用adb shell命令查看 /system 分区中已使用的空间大小
adb shell du -sh /system
输出格式:
898M /system
从上面的输出可以看出,/system 分区中已使用的空间大小是898M。
3.使用系统StoreStatsManager的API获取系统分区占据的空间大小
由于Android 11及更高版本修改了文件存储方案,因此StoreStatsManager将替换之前的API。因此,如果您的设备运行的是Android 11或更高版本,则可以使用StoreStatsManager获取系统分区的大小。
以下是使用StoreStatsManager获取系统分区大小的示例代码:
long usedBytes = StorageStatsManager.STORAGE_STATS_UNKNOWN;
long totalBytes = StorageStatsManager.STORAGE_STATS_UNKNOWN;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
StorageStatsManager storageStatsManager =
(StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);
try {
// 获取/system分区的UUID
UUID systemUuid = storageStatsManager.getUuidForPath(Environment.getRootDirectory());
//获取系统分区占用的空间大小
StorageStats storageStats = storageStatsManager.queryStatsForUuid(systemUuid);
usedBytes = storageStats.getAppBytes() + storageStats.getDataBytes()
+ storageStats.getMediaBytes() + storageStats.getObbBytes();
totalBytes = storageStats.getTotalBytes();
} catch (Exception e) {
Log.e(TAG, "Failed to get storage statistics", e);
}
}
//将结果转换为单位为MB的大小
float usedMb = (float) usedBytes / (1024 * 1024);
float totalMb = (float) totalBytes / (1024 * 1024);
Log.i(TAG, "Used space: " + usedMb + "MB");
Log.i(TAG, "Total space: " + totalMb + "MB");
注意:在Android 10及更低版本中运行时,以上代码将输出存储空间为“0MB”。因此,在这些旧版本中,建议使用第一种方法或第二种方法来获取系统分区的大小。
希望这些步骤对您有所帮助!