Код: Выделить всё
val stat = StatFs(path) // path = "/storage/emulated/0"
val totalBytes = stat.totalBytes
< /code>
Этот метод работает правильно для получения общего размера SD -карты. Однако при использовании для внутренней хранилища он не включает пространство, используемое системой, и возвращает более низкое значение, чем фактический размер: < /p>
Log.d("totalBytes", totalBytes.toString()) // Returns 109799354368
< /code>
Добавление вставленного системой пространства в возвращаемое значение дает правильный общий размер внутреннего хранилища. src = "https://i.sstatic.net/h3tipbuo.jpg"/>
Я также исследовал потенциальные решения и обнаружил два основных подхода:
[list]
[*] Использование команды DF в Linux (на котором основан Android). Тем не менее, я понимаю, что этот метод имеет ограничения, риски, и, как правило, лучше использовать официальные API Android. Этот метод требует разрешения package_usage_stats, которое является чувствительным разрешением. Это не запрашивается с помощью стандартных диалогов разрешений на системную систему (یا разрешение на выполнение выполнения یا Типичные диалоговые окна системного разрешения), и пользователь должен быть направлен на настройки для его предоставления. Кроме того, приложение «Files By Google», по -видимому, может получить общий размер внутреннего хранилища, не запрашивая это разрешение.
[/list]
Я искал онлайн -экступирование. Как я могу извлечь общий размер внутреннего хранилища, не требуя чувствительных разрешений или, по крайней мере, только с внешними разрешениями хранения (READ_EXTERNAL_STORAGEПодробнее здесь: https://stackoverflow.com/questions/794 ... android-ko