Link: j'ai travaillé sur la base de ce lien
J'ai ajouté cette ligne pour trouver la taille (à la fois interne et externe), p> J'ai testé dans ma tablette. Je reçois la taille de la carte SD interne et externe, P> en stockage interne: p> en stockage externe: p> mais en tablette, j'ai vu des paramètres. Une taille de stockage externe a 8 Go. Mais cela me montre 1,7 Go lorsque j'ai testé par programmation. P> Quelle est la procédure à suivre pour trouver une taille de stockage externe? P> p>
4 Réponses :
Pour obtenir l'espace "GRATUIT" de la carte SD externe pour afficher un numéro qui accepte le numéro de menu-> Paramètres-> SD et numéro de stockage du téléphone, utilisez le code suivant:
String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { // We can only read the media } else { // No external media }
Explication intéressante, très utile
Je suis venu ici comme getAnvailableblocks () code> est obsolète. Cela ne fonctionne pas de Kitkat à partir. Il semble que ces valeurs soient négatives si la taille est trop grande. Ainsi, il est suggéré d'utiliser
getAvailableBlockslong () code>.
Est Freesize b> en MB ou octets?
Afin de rendre compte de la dépréciation et de la disponibilité, j'ai effectué ces méthodes.
public static long sdCardFree_bytes() { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long free_memory = 0; //return value is in bytes if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { free_memory = stat.getAvailableBlocksLong() * stat.getBlockSizeLong(); } else { free_memory = stat.getAvailableBlocks() * stat.getBlockSize(); } return free_memory; } public static long sdCardUsed_bytes() { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long free_memory = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { free_memory = (stat.getBlockCountLong() - stat.getAvailableBlocksLong()) * stat.getBlockSizeLong(); //return value is in bytes } else { free_memory = (stat.getBlockCount() - stat.getAvailableBlocks()) * stat.getBlockSize(); //return value is in bytes } return free_memory; } public static long sdCardTotal_bytes() { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long free_memory = 0; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { free_memory = stat.getBlockCountLong() * stat.getBlockSizeLong(); //return value is in bytes } else { free_memory = stat.getBlockCount() * stat.getBlockSize(); //return value is in bytes } return free_memory; }
Vous pouvez utiliser gettotatalspace () code>,
getfreespace () code> ou
getUnablespace () code> https://developer.android.com/reference/java/io/file.html
Use the following code it may help public void getInternalmemorySize() { StatFs stat_fs = new StatFs(Environment.getExternalStorageDirectory().getPath()); double avail_sd_space = (double) stat_fs.getAvailableBlocksLong() * (double) stat_fs.getBlockSizeLong(); double GB_Available = (avail_sd_space / 1073741824); double GBTotal = ((double) stat_fs.getBlockCountLong() * (double) stat_fs.getBlockSizeLong()) / 1073741824; SDCardCheck(); Log.e("Memory", "Available MB Internal: " + GB_Available + "---" + GBTotal); } @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) { e.printStackTrace(); 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; long avaiblockSize, availableBlocks; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { blockSize = stat.getBlockSizeLong(); totalBlocks = stat.getBlockCountLong(); avaiblockSize = stat.getAvailableBlocksLong(); availableBlocks = stat.getBlockSizeLong(); } else { blockSize = stat.getBlockSize(); totalBlocks = stat.getBlockCount(); avaiblockSize = stat.getAvailableBlocks(); availableBlocks = stat.getBlockSize(); } Log.e("Memory", "Memory--external--" + (double) (blockSize * totalBlocks) / 1073741824 + "---" + (double) (avaiblockSize * availableBlocks) / 1073741824); 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; } } size = 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(); } Ther is some calculation behalf of these Methods. StructStatVfs[ f_bavail=81523, f_bfree=81523, f_blocks=242304, f_bsize=32768, f_favail=0, f_ffree=0, f_files=0, f_flag=1038, f_frsize=32768, f_fsid=0, f_namemax=1530 ] StructStatVfs[ f_bavail=1633375, f_bfree=1641567, f_blocks=3134770, f_bsize=4096, f_favail=767939, f_ffree=767939, f_files=804672, f_flag=1038, f_frsize=4096, f_fsid=0, f_namemax=255 ] Internal- 3134770*4096/1024*1024*1024=11.957.10 1633375*4096/1024*1024*1024=6.23 External- 81523*32768/1024*1024*1024=2.487 242304*32768/1024*1024*1024=7.39