Код: Выделить всё
val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager
storageManager.storageVolumes
.forEach { volume ->
Timber.d("uuid: ${volume.uuid}, storageUuid: ${volume.storageUuid}, path: ${volume.directory}, desc: ${volume.getDescription(context)}, state: ${volume.state}, isDir: ${volume.directory?.isDirectory}, isRemovable: ${volume.isRemovable}\nallocatedBytes: ${volume.storageUuid?.let { storageManager.getAllocatableBytes(it) }}")
}
Встроенное/внутреннее основное хранилище №1:
Код: Выделить всё
uuid: null
storageUuid: 41217664-9172-527a-b3d5-edabb50a7d69
path: /storage/emulated/0
desc: Internal storage
state: mounted
isDir: true
isRemovable: false
allocatedBytes: 33695051776
Код: Выделить всё
uuid: 8013-83C4
storageUuid: null
path: /mnt/media_rw/8013-83C4
desc: ESD-USB
state: mounted
isDir: false
isRemovable: true
allocatedBytes: null // because storageUuid is null here
#1 с помощью StatFs будет исключение:
Код: Выделить всё
val stats = StatFs(volumeEsdUsb.directory.absolutePath)
val freeSpace = stats.availableBlocksLong * stats.blockSizeLong
/mnt/media_rw/8013-83C4 в android.os.StatFs.doStat(StatFs. java:53)
at android.os.StatFs.(StatFs.java:43)
#2 с томомEsdUsb.directory.usableSpace< /code> он просто возвращает 0
Есть ли какое-нибудь другое решение, чтобы получить свободное место на флешке Или в Android нет ничего подобного для USB-флешек из box?
При использовании Storage Access Framework вообще нет никакой информации о каком-либо томе хранилища, мы можем просто получить TreeUri и использовать его с Document работать с файлами (создавать, редактировать, удалять, перемещать, копировать)
Подробнее здесь: https://stackoverflow.com/questions/774 ... gh-usb-otg