Как получить доступное место на Android SDCard? - PullRequest
3 голосов
/ 10 сентября 2010

Я использую Environment.getExternalStorageDirectory () для создания файла, и мне нужно знать, достаточно ли свободного места, прежде чем создавать и хранить файл.это тоже было бы полезно.

Ответы [ 4 ]

6 голосов
/ 10 сентября 2010

Вы должны использовать класс StatFs .Вот пример того, как использовать его из исходного кода в приложении «Настройки», найденном на телефоне.

        if (status.equals(Environment.MEDIA_MOUNTED)) {
        try {
            File path = Environment.getExternalStorageDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            long availableBlocks = stat.getAvailableBlocks();

            mSdSize.setSummary(formatSize(totalBlocks * blockSize));
            mSdAvail.setSummary(formatSize(availableBlocks * blockSize) + readOnly);

            mSdMountToggle.setEnabled(true);
            mSdMountToggle.setTitle(mRes.getString(R.string.sd_eject));
            mSdMountToggle.setSummary(mRes.getString(R.string.sd_eject_summary));

        } catch (IllegalArgumentException e) {
            // this can occur if the SD card is removed, but we haven't received the 
            // ACTION_MEDIA_REMOVED Intent yet.
            status = Environment.MEDIA_REMOVED;
        }
2 голосов
/ 10 сентября 2010

Использование StatFS. Это должно сработать, если вы передадите значение от Environment.getExternalStorageDirectory() в конструктор (конечно, преобразовав в String).

1 голос
/ 02 декабря 2010

Возможно, вам придется перезапустить, чтобы получить точные результаты:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
stat.restat(Environment.getExternalStorageDirectory().getAbsolutePath());
long available = ((long) stat.getAvailableBlocks() * (long) stat.getBlockSize());
0 голосов
/ 13 июня 2014

Используется начиная с уровня API 9:

Environment.getExternalStorageDirectory().getUsableSpace();

http://developer.android.com/reference/java/io/File.html#getUsableSpace()

...