当我想查看安卓设备上的总免费空间时,通常需要查看内部存储和外部存储(SD卡)两者的空间。
根据我在一些SO答案中所读到的内容,我会像这样找到内部存储数据(免费空间、可用空间等):
如果我想要获取安卓设备的外部存储器(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));
如果我想要获取安卓设备的外部存储器(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模拟设备中尝试过这个方法。