How can I check how much free space an SD card mounted on an Android device has?

前端 未结 5 2015
轻奢々
轻奢々 2020-11-29 02:04

How can I programmatically check how much free space an SD card mounted on an Android device has?

相关标签:
5条回答
  • 2020-11-29 02:20
    public static float megabytesAvailable(String  StrPath) {
      StatFs stat = new StatFs(StrPath);
    
      long bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks();
      return bytesAvailable / (1024.f * 1024.f);
    }
    
    0 讨论(0)
  • 2020-11-29 02:30

    To get the external SD card's available "free" space to show a number which agrees with the Menu->Settings->SD card and phone storage's number, use the following code:

    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;
    

    Relevant documentation: http://developer.android.com/reference/android/os/StatFs.html

    0 讨论(0)
  • 2020-11-29 02:31

    Here's a simpler way, that is usable since API level 9:

    Environment.getExternalStorageDirectory().getUsableSpace();
    

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

    0 讨论(0)
  • 2020-11-29 02:36

    This code is working for me:

    StatFs stat = new StatFs(System.getenv("SECONDARY_STORAGE"));
    
    long bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks();
    
    long kiloAvailable = bytesAvailable / 1024; // Available space from SD in KB
    long megaAvailable = bytesAvailable / (1024*1024); // Available space from SD in MB
    
    return (int)kiloAvailable; 
    
    0 讨论(0)
  • 2020-11-29 02:45
    /**
     * 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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题