Per ottenere risultati a disposizione lo spazio "libero" della scheda SD esterna per mostrare un numero che è d'accordo con la Menu-> Impostazioni-> scheda SD e il numero di memoria del telefono, utilizzare il seguente codice:
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;
Ecco come si ottiene formati di archiviazione interne:
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;
Ecco come si ottiene dimensioni esterne di memorizzazione (SD di dimensioni carta):
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;
Breve nota
blocchi gratis:
Il numero totale di blocchi che sono libero sul file system, tra cui blocchi riservati (che non sono disponibili per le applicazioni normali) .
blocchi disponibili:
Il numero di blocchi che sono liberi sul file system e disponibile per applicazioni.
Ecco come rilevare se la scheda SD è montato:
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
}
documentazione pertinente: http://developer.android.com/reference/android/os/StatFs.html
interessante spiegazione, molto utile – Dimitri
Sono venuto qui come 'getAvailableBlocks()' è deprecato. Non funziona da KitKat in poi. Sembra che questi valori siano negativi se la dimensione è troppo grande. Quindi, si suggerisce di usare 'getAvailableBlocksLong()'. – msysmilu
È ** freeSize ** in MB o byte? –