如何获得外部存储SD卡大小(带有安装的SD卡)?

Ach*_*ver 11 storage android sd-card android-external-storage

链接:我根据此链接进行了工作

我添加了这一行来查找大小(内部和外部)大小,

return availableExternalMemorySize/(1024*1024);
Run Code Online (Sandbox Code Playgroud)

我在平板电脑上测试过.我得到内部和外部SD卡大小,因为,

在内部存储中:

  1. 总内存--1007
  2. 可用内存 - 683

在外部存储中:

  1. 总记忆 - 1763
  2. 可用内存 - 1554

但在Tablet中,我看到了设置.外部存储大小为8GB.但是,当我通过编程方式进行测试时,它向我展示了1.7 GB.

查找外部存储大小的步骤是什么?

MDM*_*lik 14

要获得外部SD卡可用的"空闲"空间以显示与菜单 - >设置 - > SD卡和电话存储号码一致的号码,请使用以下代码:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
double sdAvailSize = (double)stat.getAvailableBlocks()
                   * (double)stat.getBlockSize();
//One binary gigabyte equals 1,073,741,824 bytes.
double gigaAvailable = sdAvailSize / 1073741824;
Run Code Online (Sandbox Code Playgroud)

以下是获取内部存储大小的方法:

 StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());        
 long blockSize = statFs.getBlockSize();
 long totalSize = statFs.getBlockCount()*blockSize;
 long availableSize = statFs.getAvailableBlocks()*blockSize;
 long freeSize = statFs.getFreeBlocks()*blockSize;
Run Code Online (Sandbox Code Playgroud)

以下是外部存储容量(SD卡大小)的方法:

 StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());        
 long blockSize = statFs.getBlockSize();
 long totalSize = statFs.getBlockCount()*blockSize;
 long availableSize = statFs.getAvailableBlocks()*blockSize;
 long freeSize = statFs.getFreeBlocks()*blockSize;
Run Code Online (Sandbox Code Playgroud)

简短说明

免费区块:

文件系统上空闲的块总数,包括保留块(普通应用程序不可用).

可用块:

文件系统上可用且可供应用程序使用的块数.


以下是检测SD卡是否已安装的方法:

 String state = Environment.getExternalStorageState();
 if (Environment.MEDIA_MOUNTED.equals(state)) 
 {
   // We can read and write the media    
 } 
 else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) 
 {
    // We can only read the media     
 } 
 else 
 {
    // No external media
 }
Run Code Online (Sandbox Code Playgroud)

相关文档:http://developer.android.com/reference/android/os/StatFs.html

  • 我来到这里是因为`getAvailableBlocks()`已被弃用.它从KitKat开始不起作用.如果尺寸太大,这些值似乎是负值.因此,建议使用`getAvailableBlocksLong()`. (2认同)