Android中的内部手机存储

Joh*_*ohn 6 android

如何从应用程序中检索手机内部存储?我找到了MemoryInfo,但它似乎返回了有关当前运行任务的内存使用量的信息.

我正在尝试让我的应用程序检索有多少内部手机存储空间可用.

Jos*_*Lee 18

使用android.os.Environment查找内部目录,然后使用android.os.StatFs调用的Unix statfs上的系统调用.从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);
Run Code Online (Sandbox Code Playgroud)


Laz*_*nja 5

我的作品很难完成。所以我想分享我的工作代码以节省一些人的时间。
在 32GB 设备和 1GB 设备上进行了测试。

// 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;
        }
}
Run Code Online (Sandbox Code Playgroud)