Ok, tôi đã luôn tự hỏi điều này và không thể tìm thấy câu trả lời trực tuyến. Vì vậy, đây là những gì tôi làm. Nó có thể không được sạch sẽ như vậy nhưng nó hoạt động cho tôi mỗi lần.
Đối với trường hợp của tôi: nó trả về 61,055 MB. Tôi đã lắp thẻ SD 64 GB.
Oh và tôi quên đề cập đến: Tôi đã làm điều này trên Samsung Galaxy S5 6.0 và Sony Xperia Z5 cao cấp 5.1.1 ngày hôm nay để xác nhận. Tuy nhiên, tôi cũng có một ứng dụng mà hàng trăm người sử dụng hàng ngày và tôi chưa gặp phải bất kỳ vấn đề nào.
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
static String getExternalSdCardSize() {
File storage = new File("/storage");
String external_storage_path = "";
String size = "";
if (storage.exists()) {
File[] files = storage.listFiles();
for (File file : files) {
if (file.exists()) {
try {
if (Environment.isExternalStorageRemovable(file)) {
// storage is removable
external_storage_path = file.getAbsolutePath();
break;
}
} catch (Exception e) {
Log.e("TAG", e.toString());
}
}
}
}
if (!external_storage_path.isEmpty()) {
File external_storage = new File(external_storage_path);
if (external_storage.exists()) {
size = totalSize(external_storage);
}
}
return size;
}
private static String totalSize(File file) {
StatFs stat = new StatFs(file.getPath());
long blockSize, totalBlocks;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
blockSize = stat.getBlockSizeLong();
totalBlocks = stat.getBlockCountLong();
} else {
blockSize = stat.getBlockSize();
totalBlocks = stat.getBlockCount();
}
return formatSize(totalBlocks * blockSize);
}
private static String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KB";
size /= 1024;
if (size >= 1024) {
suffix = "MB";
size /= 1024;
}
}
StringBuilder resultBuilder = new StringBuilder(Long.toString(size));
int commaOffset = resultBuilder.length() - 3;
while (commaOffset > 0) {
resultBuilder.insert(commaOffset, ',');
commaOffset -= 3;
}
if (suffix != null) resultBuilder.append(suffix);
return resultBuilder.toString();
}
Nguồn
2016-09-29 20:07:55
Bạn đã sử dụng đường dẫn nào? Mã bạn đăng không liên quan gì đến thẻ sd. – greenapps
@greenapps tôi đã thử như 20 giải pháp được đăng trong ngăn xếp. Không thể nhớ tất cả chúng. Chỉ cần thử tất cả chúng. Không ai trong số họ hoạt động kể từ 4.4 kitkat. Bạn có biết một giải pháp hoạt động không? – NullPointerException
Tôi không biết những gì bạn đã thử. Và bạn đã không nói cho con đường bạn đã lấy cho thẻ sd. Nếu bạn chỉ nói với con đường. – greenapps