Saya ingin mendapatkan ukuran memori bebas pada penyimpanan internal / eksternal perangkat saya secara terprogram. Saya menggunakan bagian kode ini:
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();
long megAvailable = bytesAvailable / 1048576;
Log.e("","Available MB : "+megAvailable);
File path = Environment.getDataDirectory();
StatFs stat2 = new StatFs(path.getPath());
long blockSize = stat2.getBlockSize();
long availableBlocks = stat2.getAvailableBlocks();
String format = Formatter.formatFileSize(this, availableBlocks * blockSize);
Log.e("","Format : "+format);
dan hasil yang saya dapatkan adalah:
11-15 10:27:18.844: E/(25822): Available MB : 7572
11-15 10:27:18.844: E/(25822): Format : 869MB
Masalahnya adalah saya ingin mendapatkan memori gratis SdCard yang 1,96GB
sekarang. Bagaimana cara memperbaiki kode ini sehingga saya bisa mendapatkan ukuran gratis?
android
android-sdcard
diskspace
Android-Droid
sumber
sumber
Jawaban:
Di bawah ini adalah kode untuk tujuan Anda:
Dapatkan Ukuran RAM
sumber
getBlockSize()
dangetBlockCount
tidak digunakan lagi.Inilah cara saya melakukannya:
sumber
getBlockSize
dangetAvailableBlocks
dengangetBlockSizeLong
dangetAvailableBlocksLong
.Sejak API 9, Anda dapat melakukan:
sumber
File.getUsableSpace()
terlihat seperti metode yang lebih mudah untuk digunakan daripada menggunakanStatFs
. Mengapa saya menggunakanStatFs
@MarkCarter?Untuk mendapatkan semua folder penyimpanan yang tersedia (termasuk kartu SD), Anda mendapatkan file penyimpanan terlebih dahulu:
Kemudian Anda bisa mendapatkan ukuran yang tersedia untuk masing-masingnya.
Ada 3 cara untuk melakukannya:
API 8 dan yang lebih lama:
API 9 ke atas:
API 18 ke atas (tidak diperlukan jika yang sebelumnya baik-baik saja):
Untuk mendapatkan string berformat bagus dari apa yang Anda dapatkan sekarang, Anda dapat menggunakan:
atau Anda dapat menggunakan ini jika Anda ingin melihat jumlah byte yang tepat tetapi bagus:
Perhatikan bahwa menurut saya penyimpanan internal bisa sama dengan penyimpanan eksternal pertama, karena yang pertama adalah yang diemulasikan.
EDIT: Menggunakan StorageVolume di Android Q dan di atasnya, saya pikir mungkin untuk mendapatkan ruang kosong masing-masing, menggunakan sesuatu seperti:
Saya tidak yakin apakah ini benar, dan saya tidak dapat menemukan cara untuk mendapatkan ukuran total masing-masing, jadi saya menulis tentang itu di sini , dan menanyakannya di sini .
sumber
@ Android-Droid - Anda salah
Environment.getExternalStorageDirectory()
menunjuk ke penyimpanan eksternal yang tidak harus berupa kartu SD, itu juga dapat dipasang di memori internal. Lihat:Temukan lokasi kartu SD eksternal
sumber
Coba cuplikan sederhana ini
sumber
java.lang.ArrayIndexOutOfBoundsException: length=5; index=-2147483648
kesalahan, tampaknyadigitGroups
hasilnya adalah -2147483648.Sangat mudah untuk mengetahui penyimpanan yang tersedia jika Anda mendapatkan jalur penyimpanan internal maupun eksternal. Juga jalur penyimpanan eksternal ponsel sangat mudah ditemukan menggunakan
Jadi saya hanya berkonsentrasi pada cara mengetahui jalur penyimpanan eksternal yang dapat dilepas seperti kartu sd yang dapat dilepas, USB OTG (tidak diuji USB OTG karena saya tidak memiliki OTG USB).
Metode di bawah ini akan memberikan daftar semua kemungkinan jalur penyimpanan eksternal yang dapat dilepas.
sumber
Penambahan cepat ke topik memori Eksternal
Jangan bingung dengan nama metode
externalMemoryAvailable()
dalam jawaban Dinesh Prajapati.Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
memberi Anda status memori saat ini, jika media ada dan dipasang pada titik pemasangannya dengan akses baca / tulis. Anda akan mendapatkantrue
bahkan pada perangkat tanpa kartu SD, seperti Nexus 5. Tapi tetap saja itu adalah metode yang 'harus dimiliki' sebelum operasi apa pun dengan penyimpanan.Untuk memeriksa apakah ada SD-card di perangkat Anda, Anda dapat menggunakan metode
ContextCompat.getExternalFilesDirs()
Itu tidak menampilkan perangkat sementara, seperti USB flash drive.
Ketahuilah juga bahwa
ContextCompat.getExternalFilesDirs()
pada Android 4.3 dan yang lebih rendah akan selalu mengembalikan hanya 1 entri (kartu SD jika tersedia, jika tidak Internal). Anda dapat membaca lebih lanjut di sini .dalam kasus saya itu sudah cukup, tetapi jangan lupa bahwa beberapa perangkat Android mungkin memiliki 2 kartu SD, jadi jika Anda membutuhkan semuanya - sesuaikan kode di atas.
sumber
Kelas StorageStatsManager memperkenalkan Android O dan yang lebih baru yang dapat memberi Anda byte gratis dan total dalam penyimpanan eksternal / internal. Untuk detailnya dengan kode sumber, Anda dapat membaca artikel saya berikut ini. Anda dapat menggunakan refleksi untuk yang lebih rendah dari Android O
https://medium.com/cashify-engineering/how-to-get-storage-stats-in-android-o-api-26-4b92eca6805b
sumber
Ini adalah cara saya melakukannya ..
Total memori internal
Ukuran bebas internal
Memori total dan bebas eksternal
sumber
Tentang menory eksternal, ada cara lain:
File external = Environment.getExternalStorageDirectory(); free:external.getFreeSpace(); total:external.getTotalSpace();
sumber
Setelah memeriksa solusi yang berbeda, tulis kode sendiri, ini adalah kode lengkap untuk ditemukan
'' ''
sumber