如何查看安装在Android设备上的SD卡有多少可用空间?

And*_*ndy 33 android

如何以编程方式检查安装在Android设备上的SD卡有多少可用空间?

小智 80

要获得外部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)

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

  • 在API 18**中不推荐使用`getAvailableBlocks()`和`getBlockSize()`所以我会对你的构建版本进行某种检查以确保你应用正确的方法:`if(Build.VERSION. SDK_INT> = Build.VERSION_CODES.JELLY_BEAN_MR2){@SuppressWarnings("deprecation")long sdAvailSize =(long)stat.getAvailableBlocksLong()*(long)stat.getBlockSizeLong(); } else {@SuppressWarnings("deprecation")double sdAvailSize =(double)stat.getAvailableBlocks()*(double)stat.getBlockSize(); }` (11认同)

Muh*_*rif 13

/**
 * This class is designed to get available space in external storage of android. 
 * It contains methods which provide you the available space in different units e.g
 * bytes, KB, MB, GB. OR you can get the number of available blocks on external storage.
 *
 */
public class AvailableSpaceHandler {

    //*********
    //Variables
    /**
     * Number of bytes in one KB = 2<sup>10</sup>
     */
    public final static long SIZE_KB = 1024L;

    /**
     * Number of bytes in one MB = 2<sup>20</sup>
     */
    public final static long SIZE_MB = SIZE_KB * SIZE_KB;

    /**
     * Number of bytes in one GB = 2<sup>30</sup>
     */
    public final static long SIZE_GB = SIZE_KB * SIZE_KB * SIZE_KB;

    //********
    // Methods

    /**
     * @return Number of bytes available on external storage
     */
    public static long getExternalAvailableSpaceInBytes() {
        long availableSpace = -1L;
        try {
            StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
            availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return availableSpace;
    }


    /**
     * @return Number of kilo bytes available on external storage
     */
    public static long getExternalAvailableSpaceInKB(){
        return getExternalAvailableSpaceInBytes()/SIZE_KB;
    }
    /**
     * @return Number of Mega bytes available on external storage
     */
    public static long getExternalAvailableSpaceInMB(){
        return getExternalAvailableSpaceInBytes()/SIZE_MB;
    }

    /**
     * @return gega bytes of bytes available on external storage
     */
    public static long getExternalAvailableSpaceInGB(){
        return getExternalAvailableSpaceInBytes()/SIZE_GB;
    }

    /**
     * @return Total number of available blocks on external storage
     */
    public static long getExternalStorageAvailableBlocks() {
        long availableBlocks = -1L;
        try {
            StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
            availableBlocks = stat.getAvailableBlocks();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return availableBlocks;
    }
}
Run Code Online (Sandbox Code Playgroud)


tkn*_*ell 10

这是一种更简单的方法,自API级别9起可用:

Environment.getExternalStorageDirectory().getUsableSpace();
Run Code Online (Sandbox Code Playgroud)

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