通过getDataDirectory()和getRootDirectory()检查可用空间是不一样的

时间:2018-04-07 04:57:27

标签: android android-storage

我尝试使用getDataDirectory().getPath()getRootDirettory().getAbsolutePath()检查Android手机上的可用空间,我得到了这些结果,

使用getRootDirectory().getAbsolutePath()

StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
    Log.w("Path", String.valueOf(Environment.getRootDirectory()) );
    Log.w("Path", Environment.getRootDirectory().getAbsolutePath());
    long free_memory = statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong();
    Log.d("Available byte by Environment.getRootDirectory().getAbsolutePath(): ", String.valueOf(free_memory/1048576));

Logcat:

  

W / Path:/ system

     

W / Path:/ system

     

W进行Environment.getRootDirectory()/可字节。getAbsolutePath()::   91

使用getRootDirectory().getPath()

statFs = new StatFs(Environment.getDataDirectory().getPath());
    Log.w("Path", String.valueOf(Environment.getDataDirectory()) );
    Log.w("Path", Environment.getDataDirectory().getPath());
    long free_memory02 = statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong();
    Log.d("Available byte by Environment.getDataDirectory().getPath(): ", String.valueOf(free_memory02/1048576));

Logcat:

  

W / Path:/ data

     

W / Path:/ data

     

W /可用字节由Environment.getDataDirectory()。getPath():: 21426   MB或20.924 GB

但是当我通过手机中的设置检查可用空间时,只显示: 20.34 GB

检查手机中可用空间的最佳准确方法是什么?为什么getRootDirectory().getAbsolutePath()getDataDirectory.getPath()没有给出相同的空间?

1 个答案:

答案 0 :(得分:2)

  

检查可用空间的最佳准确方法是什么

最好使用 Environment.getExternalStorageDirectory() 来检查可用内存。

内部存储空间中有 different partitions

/ data 分区:仅包含用户数据。的 //getDataDirectory()

/ system 分区:拥有核心Android操作系统。的 //getRootDirectory()

  

为什么getRootDirectory()。getAbsolutePath()和   getDataDirectory()。getPath()不给出相同的空格?

因为它们是不同的目录。

您可以使用

  final StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
  long totalinternal = (long) stat.getBlockSize() * (long) stat.getBlockCount();
  long available = (long) stat.getBlockSize() * (long) stat.getAvailableBlocks();