3

当我想查看我的 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 模拟设备中尝试过这个。

4

1 回答 1

1

大多数人的外部概念与谷歌不同。内部空间与 SD 卡一起算作外部存储目录。

问题是,物理 SD 卡安装在同一个文件系统中,并且位置因制造商/ROM 而异。这里这里有一些关于这个问题的问题。不幸的是,似乎没有设备通用的解决方案。

于 2013-01-14T19:13:07.227 回答