Je souhaite obtenir la taille de la mémoire libre sur le stockage interne / externe de mon appareil par programmation. J'utilise ce morceau de code:
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);
et le résultat que j'obtiens est:
11-15 10:27:18.844: E/(25822): Available MB : 7572
11-15 10:27:18.844: E/(25822): Format : 869MB
Le problème est que je veux obtenir la mémoire libre de SdCard qui est en 1,96GB
ce moment. Comment puis-je corriger ce code pour pouvoir obtenir la taille gratuite?
android
android-sdcard
diskspace
Android-Droid
la source
la source
Réponses:
Vous trouverez ci-dessous le code correspondant à votre objectif:
Obtenir la taille de la RAM
la source
getBlockSize()
etgetBlockCount
sont obsolètes.Voici comment je l'ai fait:
la source
getBlockSize
etgetAvailableBlocks
pargetBlockSizeLong
etgetAvailableBlocksLong
.Depuis l'API 9, vous pouvez faire:
la source
File.getUsableSpace()
ressemble à une méthode plus facile à utiliser plutôt que d' utiliserStatFs
. Pourquoi utiliserStatFs
@MarkCarter?Pour obtenir tous les dossiers de stockage disponibles (y compris les cartes SD), vous obtenez d'abord les fichiers de stockage:
Ensuite, vous pouvez obtenir la taille disponible de chacun d'entre eux.
Il y a 3 façons de le faire:
API 8 et inférieur:
API 9 et supérieur:
API 18 et supérieur (non nécessaire si la précédente est correcte):
Pour obtenir une belle chaîne formatée de ce que vous avez maintenant, vous pouvez utiliser:
ou vous pouvez l'utiliser au cas où vous souhaiteriez voir le nombre d'octets exact mais bien:
Notez que je pense que le stockage interne pourrait être le même que le premier stockage externe, puisque le premier est celui émulé.
EDIT: En utilisant StorageVolume sur Android Q et supérieur, je pense qu'il est possible d'obtenir l'espace libre de chacun, en utilisant quelque chose comme:
Je ne suis pas sûr que ce soit correct, et je ne peux pas trouver un moyen d'obtenir la taille totale de chacun, alors j'ai écrit à ce sujet ici et posé des questions à ce sujet ici .
la source
@ Android-Droid - vous vous trompez de
Environment.getExternalStorageDirectory()
points de stockage externe qui ne doit pas nécessairement être une carte SD, il peut également être monté sur la mémoire interne. Voir:Trouver un emplacement de carte SD externe
la source
Essayez cet extrait de code simple
la source
java.lang.ArrayIndexOutOfBoundsException: length=5; index=-2147483648
erreur, semble que ledigitGroups
résultat est -2147483648.Il est très facile de connaître le stockage disponible si vous obtenez un chemin de stockage interne et externe. Le chemin de stockage externe du téléphone est également très facile à découvrir à l'aide
Je me concentre donc simplement sur la façon de trouver les chemins du stockage amovible externe comme la carte SD amovible, l'USB OTG (non testé USB OTG car je n'ai pas d'USB OTG).
La méthode ci-dessous donnera une liste de tous les chemins de stockage amovibles externes possibles.
la source
Ajout rapide à la rubrique Mémoire externe
Ne soyez pas confus par le nom de la méthode
externalMemoryAvailable()
dans la réponse de Dinesh Prajapati.Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
vous donne l'état actuel de la mémoire, si le support est présent et monté à son point de montage avec un accès en lecture / écriture. Vous obtiendreztrue
même sur les appareils sans carte SD, comme le Nexus 5. Mais c'est toujours une méthode «incontournable» avant toute opération avec stockage.Pour vérifier s'il y a une carte SD sur votre appareil, vous pouvez utiliser la méthode
ContextCompat.getExternalFilesDirs()
Il n'affiche pas les périphériques transitoires, tels que les clés USB.
Sachez également que
ContextCompat.getExternalFilesDirs()
sur Android 4.3 et les versions antérieures, il ne renverra toujours qu'une seule entrée (carte SD si elle est disponible, sinon interne). Vous pouvez en savoir plus ici .dans mon cas, c'était suffisant, mais n'oubliez pas que certains appareils Android peuvent avoir 2 cartes SD, donc si vous en avez besoin, ajustez le code ci-dessus.
la source
La classe StorageStatsManager a introduit Android O et supérieur, ce qui peut vous donner un octet gratuit et total dans le stockage externe / interne. Pour plus de détails sur le code source, vous pouvez lire mon article suivant. vous pouvez utiliser la réflexion pour une version inférieure à Android O
https://medium.com/cashify-engineering/how-to-get-storage-stats-in-android-o-api-26-4b92eca6805b
la source
C'est comme ça que je l'ai fait.
Mémoire totale interne
Taille libre interne
Mémoire externe libre et totale
la source
A propos du menory externe, il existe un autre moyen:
File external = Environment.getExternalStorageDirectory(); free:external.getFreeSpace(); total:external.getTotalSpace();
la source
Après avoir vérifié différentes solutions, écrivez moi-même le code, il s'agit du code complet à rechercher
'' ''
la source