当我想查看我的 android 上的总可用空间时,我通常会同时查看内部存储和外部存储(SD 卡)。
根据我在一些 SO 答案中读到的内容,我会发现内部存储数据(可用空间、可用空间等)如下所示:
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
//Logging added to make sure I am not going mad
Log.v(TAG,"Available Blocks: "+Long.toString(availableBlocks));
Log.v(TAG,"Total Blocks: "+Long.toString(totalBlocks));
Log.v(TAG,"Block size: "+Long.toString(blockSize));
如果我想获取我的 android 设备的外部存储(SD 卡),我会运行如下代码:
FilePath path = Environment..getExternalStorageDirectory();
StatFs stat = new StatFs(Environment.getPath());
this.extblockSize = stat.getBlockSize();
long exttotalBlocks = stat.getBlockCount();
long extavailableBlocks = stat.getAvailableBlocks();
//More logging to ensure I am not mad!
Log.v(TAG,"EXTAvailable Blocks: "+Long.toString(extavailableBlocks));
Log.v(TAG,"EXTTotal Blocks: "+Long.toString(exttotalBlocks));
Log.v(TAG,"EXTBlock size: "+Long.toString(extblockSize));
我说的对吗?这就是您在 android 设备上读取外部和内部存储的方式吗?
假设我是对的,我有一点问题。当我在三星 Galaxy SIII 上运行上面的代码时,上面的代码片段返回的内存量完全相同。现在我知道我的三星有大约 25GB 的内部存储器,并且我有一张 4GB 的 SD 卡。
然而,这两段代码都返回正确的 25GB 总计和 23GB 空闲,这也是正确的,但仅适用于内部存储。我只是一辈子不知道如何读取SD 卡的文件系统信息。有关正在输出的实际值,请参阅下面的日志输出。
01-14 20:49:25.485: V/VLRApplication(730): Available Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): Total Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): Block size: 4096
01-14 20:49:25.485: V/VLRApplication(730): EXTAvailable Blocks: 6031460
01-14 20:49:25.485: V/VLRApplication(730): EXTTotal Blocks: 6702651
01-14 20:49:25.485: V/VLRApplication(730): EXTBlock size: 4096
所以我一定是误解了这个概念。有人可以为我澄清一下吗?是否调用Environment.getExternalStorageDirectory()
不设置 SD 卡的路径?顺便说一句,我没有在 AVD 模拟设备中尝试过这个。