2010-04-16 6 views
6

comment pouvez-vous récupérer le stockage interne de votre téléphone à partir d'une application? J'ai trouvé memoryinfo, mais il semble que cela renvoie des informations sur combien de mémoire vos tâches en cours d'exécution. J'essaie d'obtenir mon application pour récupérer combien de stockage de téléphone interne est disponible.android interne de stockage de téléphone

Répondre

17

Utilisez android.os.Environment pour trouver le répertoire interne, puis utilisez android.os.StatFs pour appeler l'appel système Unix statfs. Effrontément stolen de l'application des paramètres Android:

File path = Environment.getDataDirectory(); 
StatFs stat = new StatFs(path.getPath()); 
long blockSize = stat.getBlockSize(); 
long availableBlocks = stat.getAvailableBlocks(); 
return Formatter.formatFileSize(this, availableBlocks * blockSize); 
3

J'ai eu du mal à avoir le mien fonctionne. Donc je voudrais partager mon code de travail pour sauver quelques gars un peu de temps.
Testé sur un périphérique de 32 Go et un périphérique de 1 Go.

// Return size is in Megabytes 
public class DeviceMemory { 

     public static long getInternalStorageSpace() 
     { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      long total = ((long)statFs.getBlockCount() * (long)statFs.getBlockSize())/1048576; 
      return total; 
     } 

     public static long getInternalFreeSpace() 
     { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      long free = ((long)statFs.getAvailableBlocks() * (long)statFs.getBlockSize())/1048576; 
      return free; 
     } 

     public static long getInternalUsedSpace() 
     { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      long total = ((long)statFs.getBlockCount() * (long)statFs.getBlockSize())/1048576; 
      long free = ((long)statFs.getAvailableBlocks() * (long)statFs.getBlockSize())/1048576; 
      long busy = total - free; 
      return busy; 
     } 
} 
Questions connexes