Internal phone storage in Android

前端 未结 2 1405
既然无缘
既然无缘 2020-12-13 16:23

How can you retrieve your phone internal storage from an app? I found MemoryInfo, but it seems that returns information on how much memory use your currently running tasks.

相关标签:
2条回答
  • 2020-12-13 17:16

    I had a hard time having mine works. So I would like to share my working code to save some guys some time.
    Tested on a 32GB device and 1GB device.

    // 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;
            }
    }
    
    0 讨论(0)
  • 2020-12-13 17:21

    Use android.os.Environment to find the internal directory, then use android.os.StatFs to call the Unix statfs system call on it. Shamelessly stolen from the Android settings app:

    File path = Environment.getDataDirectory();
    StatFs stat = new StatFs(path.getPath());
    long blockSize = stat.getBlockSize();
    long availableBlocks = stat.getAvailableBlocks();
    return Formatter.formatFileSize(this, availableBlocks * blockSize);
    
    0 讨论(0)
提交回复
热议问题