2010-04-16 20 views
6

come è possibile recuperare la memoria interna del telefono da un'app? Ho trovato memoryinfo, ma sembra che restituisca informazioni su quanta memoria le attività attualmente in esecuzione. Sto cercando di ottenere la mia app per recuperare la quantità di memoria interna del telefono disponibile.memoria interna telefono Android

risposta

17

Utilizzare android.os.Environment per trovare la directory interna, quindi utilizzare android.os.StatFs per chiamare la chiamata di sistema Unix statfs su di esso. Spudoratamente stolen dalla impostazioni 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

Ho avuto un momento difficile con il mio funziona. Quindi mi piacerebbe condividere il mio codice di lavoro per salvare alcuni ragazzi un po 'di tempo.
Testato su un dispositivo da 32 GB e un dispositivo da 1 GB.

// 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; 
     } 
} 
Problemi correlati