Pour que l'espace "libre" disponible sur la carte SD externe affiche un nombre correspondant à celui de Menu->Réglages->Carte SD et stockage du téléphone, utilisez le code suivant :
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;
Voici comment obtenir les tailles de stockage 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;
Voici comment obtenir les tailles de stockage externe (taille de la carte SD) :
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;
Note brève
Blocs libres :
Le nombre total de bl libres sur le système de fichiers, y compris les blocs réservés (qui ne sont pas disponibles pour les applications normales).
Blocs disponibles :
Le nombre de blocs t système de fichiers et disponibles pour les applications.
Voici comment détecter si la carte SD est montée :
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
}
Documentation pertinente : http://developer.Android.com/reference/Android/os/StatFs.html