有没有办法在Android中获得SD卡大小?

Nul*_*ion 6 storage android sd-card android-sdcard

欢迎大家

我已经在Stackoverflow和谷歌中尝试了与此相关的所有问题,但没有一个有效.我尝试了类似下一个链接,但它返回与内部存储相同:如何获得外部存储SD卡大小(带有挂载的SD卡)?

例如,如果我有大约12GB的内部存储空间和4GB SD卡存储空间,无论我使用什么方法,我总是得到与内部空间完全相同的SD空间数.

似乎在Stackoverflow中发布的旧方法仅适用于Android KitKat,但在下一个Android版本中不起作用.

有可能解决这个问题吗?

ᴛʜᴇ*_*ᴛᴇʟ 5

好的,我一直对此感到奇怪,无法在线找到答案。所以这就是我的工作。它可能不太干净,但每次都对我有用。

就我而言:它返回61,055 MB。我插入了64 GB的SD卡。

哦,我忘了提:我今天在Samsung Galaxy S5 6.0Sony Xperia Z5 Premium 5.1.1上进行了确认。但是,我还有一个每天有数百人使用的应用程序,但是我还没有遇到任何问题。

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
static String getExternalSdCardSize() {
    File storage = new File("/storage");
    String external_storage_path = "";
    String size = "";

    if (storage.exists()) {
        File[] files = storage.listFiles();

        for (File file : files) {
            if (file.exists()) {
                try {
                    if (Environment.isExternalStorageRemovable(file)) {
                        // storage is removable
                        external_storage_path = file.getAbsolutePath();
                        break;
                    }
                } catch (Exception e) {
                    Log.e("TAG", e.toString());
                }
            }
        }
    }

    if (!external_storage_path.isEmpty()) {
        File external_storage = new File(external_storage_path);
        if (external_storage.exists()) {
            size = totalSize(external_storage);
        }
    }
    return size;
}

private static String totalSize(File file) {
    StatFs stat = new StatFs(file.getPath());
    long blockSize, totalBlocks;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
        blockSize = stat.getBlockSizeLong();
        totalBlocks = stat.getBlockCountLong();
    } else {
        blockSize = stat.getBlockSize();
        totalBlocks = stat.getBlockCount();
    }

    return formatSize(totalBlocks * blockSize);
}

private static String formatSize(long size) {
    String suffix = null;

    if (size >= 1024) {
        suffix = "KB";
        size /= 1024;
        if (size >= 1024) {
            suffix = "MB";
            size /= 1024;
        }
    }

    StringBuilder resultBuilder = new StringBuilder(Long.toString(size));

    int commaOffset = resultBuilder.length() - 3;
    while (commaOffset > 0) {
        resultBuilder.insert(commaOffset, ',');
        commaOffset -= 3;
    }

    if (suffix != null) resultBuilder.append(suffix);
    return resultBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢一堆!<3 (2认同)
  • 很好的答案 ThePatel (2认同)