Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android get free size of internal/external memory

I want to get the size of free memory on internal/external storage of my device programmatically. I'm using this piece of code :

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount(); long megAvailable = bytesAvailable / 1048576; Log.e("","Available MB : "+megAvailable);  File path = Environment.getDataDirectory(); StatFs stat2 = new StatFs(path.getPath()); long blockSize = stat2.getBlockSize(); long availableBlocks = stat2.getAvailableBlocks(); String format =  Formatter.formatFileSize(this, availableBlocks * blockSize); Log.e("","Format : "+format); 

and the result which I'm getting is :

11-15 10:27:18.844: E/(25822): Available MB : 7572 11-15 10:27:18.844: E/(25822): Format : 869MB 

The problem is that I want to get the free memory of SdCard which is 1,96GB right now. How can I fix this code so I can get the free size ?

like image 370
Android-Droid Avatar asked Nov 15 '11 08:11

Android-Droid


People also ask

How can I get internal memory of Android?

To access internal storage on a Samsung phone: Go to My Files, you can view internal storage, SD card, and Network storage. Click internal storage, you can view data and files with folders. Usually, photos are saved in the DCIM folder.


2 Answers

Below is the code for your purpose :

public static boolean externalMemoryAvailable() {         return android.os.Environment.getExternalStorageState().equals(                 android.os.Environment.MEDIA_MOUNTED);     }      public static String getAvailableInternalMemorySize() {         File path = Environment.getDataDirectory();         StatFs stat = new StatFs(path.getPath());         long blockSize = stat.getBlockSizeLong();         long availableBlocks = stat.getAvailableBlocksLong();         return formatSize(availableBlocks * blockSize);     }      public static String getTotalInternalMemorySize() {         File path = Environment.getDataDirectory();         StatFs stat = new StatFs(path.getPath());         long blockSize = stat.getBlockSizeLong();         long totalBlocks = stat.getBlockCountLong();         return formatSize(totalBlocks * blockSize);     }      public static String getAvailableExternalMemorySize() {         if (externalMemoryAvailable()) {             File path = Environment.getExternalStorageDirectory();             StatFs stat = new StatFs(path.getPath());             long blockSize = stat.getBlockSizeLong();             long availableBlocks = stat.getAvailableBlocksLong();             return formatSize(availableBlocks * blockSize);         } else {             return ERROR;         }     }      public static String getTotalExternalMemorySize() {         if (externalMemoryAvailable()) {             File path = Environment.getExternalStorageDirectory();             StatFs stat = new StatFs(path.getPath());             long blockSize = stat.getBlockSizeLong();             long totalBlocks = stat.getBlockCountLong();             return formatSize(totalBlocks * blockSize);         } else {             return ERROR;         }     }      public static String formatSize(long size) {         String suffix = null;          if (size >= 1024) {             suffix = "KB";             size /= 1024;             if (size >= 1024) {                 suffix = "MB";                 size /= 1024;             }         }          StringBuilder resultBuffer = new StringBuilder(Long.toString(size));          int commaOffset = resultBuffer.length() - 3;         while (commaOffset > 0) {             resultBuffer.insert(commaOffset, ',');             commaOffset -= 3;         }          if (suffix != null) resultBuffer.append(suffix);         return resultBuffer.toString();     } 

Get RAM Size

ActivityManager actManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); MemoryInfo memInfo = new ActivityManager.MemoryInfo(); actManager.getMemoryInfo(memInfo); long totalMemory = memInfo.totalMem; 
like image 165
Dinesh Prajapati Avatar answered Oct 05 '22 16:10

Dinesh Prajapati


This is the way I did it :

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); long bytesAvailable; if (android.os.Build.VERSION.SDK_INT >=      android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {     bytesAvailable = stat.getBlockSizeLong() * stat.getAvailableBlocksLong(); } else {     bytesAvailable = (long)stat.getBlockSize() * (long)stat.getAvailableBlocks(); } long megAvailable = bytesAvailable / (1024 * 1024); Log.e("","Available MB : "+megAvailable); 
like image 38
Android-Droid Avatar answered Oct 05 '22 17:10

Android-Droid