2010-05-31 20 views

Respuesta

80

Para obtener espacio disponible en el "libre" de la tarjeta SD externa para mostrar un número que coincide con la Menú-> Configuración> Tarjeta SD y el número de almacenamiento del teléfono, utilice el siguiente código:

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; 

documentación pertinente : http://developer.android.com/reference/android/os/StatFs.html

+0

+1 para el código de ejemplo –

+0

1 es tan útil. el otro es una burla. – murftown

+0

+1 Sí, es útil – Praveenkumar

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; 
    } 
} 
+0

¿Puedo preguntar por qué el" .restat (...) "? También creo que cometió un error al usar Environment.getDataDirectory(). GetPath() en "getExternalAvailableSpaceInBytes()" en lugar de Environment.getExternalStorageDirectory(). GetPath() ... – Kasium

+0

Solucionado: Tiene razón en ambos problemas, restablecer fue no es necesario ya que el objeto StatFs se crea en el lugar y tiene la información más reciente. Y la ruta del directorio de datos se agregó erróneamente. Gracias. –

2

Este código está trabajando para mí:

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
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); 
} 
Cuestiones relacionadas