Mevcut tüm depolama klasörlerini (SD kartlar dahil) almak için, önce depolama dosyalarını alırsınız:
File internalStorageFile=getFilesDir();
File[] externalStorageFiles=ContextCompat.getExternalFilesDirs(this,null);
Daha sonra bunların her birinin mevcut boyutunu elde edebilirsiniz.
Bunu yapmanın 3 yolu vardır:
API 8 ve altı:
StatFs stat=new StatFs(file.getPath());
long availableSizeInBytes=stat.getBlockSize()*stat.getAvailableBlocks();
API 9 ve üzeri:
long availableSizeInBytes=file.getFreeSpace();
API 18 ve üstü (bir önceki uygunsa gerekli değildir):
long availableSizeInBytes=new StatFs(file.getPath()).getAvailableBytes();
Şimdi sahip olduğunuz güzel biçimlendirilmiş dizeyi elde etmek için şunları kullanabilirsiniz:
String formattedResult=android.text.format.Formatter.formatShortFileSize(this,availableSizeInBytes);
veya tam bayt sayısını görmek isterseniz bunu kullanabilirsiniz, ancak güzel bir şekilde:
NumberFormat.getInstance().format(availableSizeInBytes);
Birincisi taklit edilen olduğu için dahili depolamanın ilk harici depolama ile aynı olabileceğini düşündüğümü unutmayın.
DÜZENLEME: Android Q ve sonraki sürümlerde StorageVolume kullanarak, aşağıdaki gibi bir şey kullanarak her birinin boş alanını elde etmenin mümkün olduğunu düşünüyorum:
val storageManager = getSystemService(Context.STORAGE_SERVICE) as StorageManager
val storageVolumes = storageManager.storageVolumes
AsyncTask.execute {
for (storageVolume in storageVolumes) {
val uuid: UUID = storageVolume.uuid?.let { UUID.fromString(it) } ?: StorageManager.UUID_DEFAULT
val allocatableBytes = storageManager.getAllocatableBytes(uuid)
Log.d("AppLog", "allocatableBytes:${android.text.format.Formatter.formatShortFileSize(this,allocatableBytes)}")
}
}
Bunun doğru olduğundan emin eğer değilim, ve ben bu konuda yazdığı bu yüzden, her toplam boyutunu almak için bir yol bulamıyorum burada , ve bu konuda sorulan burada .