2010-11-13 13 views

risposta

5

Qualcosa del genere dovrebbe funzionare:

File sdcard = Environment.getExternalStorageDirectory(); 
StatFs stat = new StatFs(sdcard.getAbsolutePath()); 
long available = stat.getAvailableBlocks() * (long) stat.getBlockSize(); 
+0

grazie mille Erich. questo ha fatto il lavoro per me. – kaisar

1

potrebbe essere necessario restat per ottenere risultati accurati:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); 
stat.restat(Environment.getExternalStorageDirectory().getAbsolutePath()); 
long available = ((long) stat.getAvailableBlocks() * (long) stat.getBlockSize()); 
+0

Perché si dovrebbe eseguire il ripristino? Ho visto questo suggerimento anche altrove, ma nessuna spiegazione del perché. –

+0

Non ne sono del tutto sicuro, ma penso che il sistema operativo o la JVM memorizzano nella cache questi dati per motivi di prestazioni (qualsiasi I/O del disco sarà molto più lento dell'elaborazione normale). Fare un ripristino impone un aggiornamento dei dati. – Merkidemis

0

Scopri questa funzione

private boolean is_sdCardSaveToUse(){ 

    /**default disk cache size in bytes*/ 
    final int DEFAULT_DISK_CACHE_SIZE = 1024 * 1024 * 10; //10 MB 

    /**get sdCard state*/ 
    String sdCardState = Environment.getExternalStorageState(); 

    /**check if the sdCard is mounted*/ 
    /**check if we can write to sdCard*/if (Environment.MEDIA_MOUNTED.equals(sdCardState)) { 
     if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(sdCardState)) { 
      Log.d("sdCard", "mounted readOnly"); 
     } else { 
      Log.d("sdCard", "mounted readWrite"); 

      /**get free usable space in bytes */ 
      long freeUsableSpace = Environment.getExternalStorageDirectory().getUsableSpace(); 
      int temp = Math.round(((float) freeUsableSpace/1024)/1024); //convert from bytes to MB. 
      Log.d("usableSpace= ", Integer.toString(temp) + " MB"); 

      if (freeUsableSpace > DEFAULT_DISK_CACHE_SIZE){ 
       return true; 
      } else { 
       Log.d("sdCard","not enough space"); 
       return false; 
      } 

     } 

    } else{ 
     Log.d("sdCard","not mounted"); 
     return false; 
    } 

    return false; 
} 
+0

Grazie per il codice, ma c'è qualche motivo speciale per non utilizzare la classe StatFs che viene utilizzata nelle risposte di altri? – Jenix

Problemi correlati