Android: 如何获取外置sd卡的存储空间?

Android: How to get storage of external sd-card?

我的设备有 32GB 内存和 64GB SD 卡。 我喜欢用这种方法获得外部自由尺寸(基于这个线程Android get free size of internal/external memory):

public static long getAvailableExternalMemorySize() {
    if (externalMemoryAvailable()) {
        File path = Environment.getExternalStorageDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return availableBlocks * blockSize;

    } else {
        return 0;
    }
}

当我 运行 这段代码时,它只显示内部存储器的空闲存储空间。 为什么不显示外部 SD 卡的大小? 在设备存储上我有 11GB 的空闲空间,在外部 SD 卡上有 40GB 的空闲空间。

问题是 api 无法访问 android 上的外部 SD 卡。 android >= 4.4 无法写入外置sd卡

你唯一可以做的事情(非常特别,不推荐用于 public 应用程序,但在受限环境中可行!),如果你确定设备是 < android 4.4:保留一份您目前在许多设备上看到的有效路径列表,并正确检查所有这些路径是否存在。也许你运气好。

我找到了读取可移动 sd 卡存储的解决方案:

此方法以字节为单位返回可移动 SD 卡上的可用内存大小。

public static long getFreeExternalMemorySize() {
        String secStore = System.getenv("SECONDARY_STORAGE");
        File path = new File(secStore);
        StatFs stat = new StatFs(path.getPath());

        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();

        return availableBlocks * blockSize;
}

阅读以下链接后,您会有所了解。

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

用于处理 SD 卡。访问前检查是否挂载了sd卡

http://developer.android.com/training/basics/data-storage/files.html#WriteExternalStorage

检查sd卡是否可读写

http://developer.android.com/training/basics/data-storage/files.html#GetFreeSpace

获取 SD 卡或内部存储中的免费 space。