代码之家  ›  专栏  ›  技术社区  ›  mobibob

如何获得Android SD卡上的可用空间?

  •  3
  • mobibob  · 技术社区  · 14 年前

    我正在使用环境.getExternalStorageDirectory()创建一个文件,在创建和存储文件之前,我需要知道是否有足够的可用空间。

    如果你能引用Android Ref doc,那也会很有帮助。

    4 回复  |  直到 14 年前
        1
  •  6
  •   Nathan Schwermann    14 年前

    你必须使用 StatFs 班级。下面是一个如何使用它的例子,从源代码到手机上的设置应用程序。

            if (status.equals(Environment.MEDIA_MOUNTED)) {
            try {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long totalBlocks = stat.getBlockCount();
                long availableBlocks = stat.getAvailableBlocks();
    
                mSdSize.setSummary(formatSize(totalBlocks * blockSize));
                mSdAvail.setSummary(formatSize(availableBlocks * blockSize) + readOnly);
    
                mSdMountToggle.setEnabled(true);
                mSdMountToggle.setTitle(mRes.getString(R.string.sd_eject));
                mSdMountToggle.setSummary(mRes.getString(R.string.sd_eject_summary));
    
            } catch (IllegalArgumentException e) {
                // this can occur if the SD card is removed, but we haven't received the 
                // ACTION_MEDIA_REMOVED Intent yet.
                status = Environment.MEDIA_REMOVED;
            }
    
        2
  •  2
  •   CommonsWare    14 年前

    StatFS . 如果您传入 Environment.getExternalStorageDirectory() 到构造函数(转换为 String

        3
  •  1
  •   Merkidemis    14 年前

    您可能需要重新启动才能获得准确的结果:

    StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
    stat.restat(Environment.getExternalStorageDirectory().getAbsolutePath());
    long available = ((long) stat.getAvailableBlocks() * (long) stat.getBlockSize());
    
        4
  •  0
  •   tknell    10 年前

    自API级别9起可用:

    Environment.getExternalStorageDirectory().getUsableSpace();
    

    http://developer.android.com/reference/java/io/File.html#getUsableSpace()