Well, I always asked this question and could not find the answer on the Internet. So here is what I do. It may not be so clean, but it works for me every time.
In my case: it returns 61,055 MB. I have a 64 gigabyte SD card installed.
Oh, and I forgot to mention: I did it on the Samsung Galaxy S5 6.0 and Sony Xperia Z5 Premium 5.1.1 today for confirmation. However, I also have an application in which several hundred people work daily, and I have not experienced any problems yet.
@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(); }
ᴛʜᴇᴘᴀᴛᴇʟ Sep 29 '16 at 20:07 2016-09-29 20:07
source share