Внутренняя память телефона в Android - PullRequest
6 голосов
/ 16 апреля 2010

Как вы можете извлечь внутреннюю память телефона из приложения? Я нашел MemoryInfo, но, похоже, возвращает информацию о том, сколько памяти использует ваши текущие задачи.

Я пытаюсь заставить мое приложение узнать, сколько внутренней памяти телефона доступно.

Ответы [ 2 ]

18 голосов
/ 16 апреля 2010

Используйте 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);
3 голосов
/ 28 февраля 2013

У меня были трудности с моими работами. Поэтому я хотел бы поделиться своим рабочим кодом, чтобы сэкономить время некоторым парням.
Протестировано на устройстве 32 ГБ и 1 ГБ.

// 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;
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...