2011-09-10 5 views
17

Je veux obtenir la taille maximale d'un périphérique. memoryInfo.getTotalPss() renvoie 0. Il n'y a pas de fonction pour obtenir la taille totale de la RAM dans ActivityManager.MemoryInfo.Comment obtenir la taille totale de la RAM d'un périphérique?

Comment faire?

+1

'public static synchronized int readTotalRam() { \t \t int tm = 1000; \t try { \t RandomAccessFile lecteur = nouveau RandomAccessFile ("/ proc/meminfo", "r"); \t Chaîne load = lecteur.readLine(); \t Chaîne [] totrm = load.split ("kB"); \t Chaîne [] trm = totrm [0] .split (""); \t tm = Integer.parseInt (trm [trm.length-1]); \t tm = Math.round (tm/1024); \t} catch (IOException ex) { \t ex.printStackTrace(); \t} \t return tm; \t} ' – BOOMik

+1

J'écris une fonction pour cela. ^^^ answer ^^^ – BOOMik

Répondre

19

commande unix Standard: $ cat /proc/meminfo

Notez que /proc/meminfo est un fichier. Vous n'avez pas besoin de lancer cat, vous pouvez simplement lire le fichier.

+0

J'ai lu le fichier/proc/meminfo et la taille de la mémoire vive. – BOOMik

+0

Revoir la version originale de l'auteur de cette réponse. Alors que Leon publie quelque chose qui fonctionne dans les niveaux d'API ultérieurs, cela ne signifie pas que cette méthode ne fonctionne plus. Les modifications de tiers ne doivent pas être utilisées pour commenter une réponse - c'est le rôle des commentaires, ou dans ce cas, la propre réponse de Leon. –

+0

En outre, je vais ajouter que du code qui s'exécute sur le périphérique, il n'y a aucune raison d'exécuter un processus 'cat' - il suffit de lire'/proc/meminfo' de votre code java ou natif comme s'il s'agissait d'un fichier texte . Cat ne serait nécessaire que si vous travailliez dans un shell, ou accédiez à quelque chose qui vous obligeait à démarrer un processus sous un ID utilisateur différent avec un 'su' piraté. –

25

A partir du niveau 16 de l'API, vous pouvez désormais utiliser la propriété totalMem de la classe MemoryInfo.

Comme ceci:

ActivityManager actManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo(); 
actManager.getMemoryInfo(memInfo); 
long totalMemory = memInfo.totalMem; 

niveau 15 et inférieur api nécessite encore d'utiliser la commande unix comme indiqué dans cweiske's answer.

15

je peux obtenir la mémoire utilisable RAM de telle manière

public String getTotalRAM() { 

    RandomAccessFile reader = null; 
    String load = null; 
    DecimalFormat twoDecimalForm = new DecimalFormat("#.##"); 
    double totRam = 0; 
    String lastValue = ""; 
    try { 
     reader = new RandomAccessFile("/proc/meminfo", "r"); 
     load = reader.readLine(); 

     // Get the Number value from the string 
     Pattern p = Pattern.compile("(\\d+)"); 
     Matcher m = p.matcher(load); 
     String value = ""; 
     while (m.find()) { 
      value = m.group(1); 
      // System.out.println("Ram : " + value); 
     } 
     reader.close(); 

     totRam = Double.parseDouble(value); 
     // totRam = totRam/1024; 

     double mb = totRam/1024.0; 
     double gb = totRam/1048576.0; 
     double tb = totRam/1073741824.0; 

     if (tb > 1) { 
      lastValue = twoDecimalForm.format(tb).concat(" TB"); 
     } else if (gb > 1) { 
      lastValue = twoDecimalForm.format(gb).concat(" GB"); 
     } else if (mb > 1) { 
      lastValue = twoDecimalForm.format(mb).concat(" MB"); 
     } else { 
      lastValue = twoDecimalForm.format(totRam).concat(" KB"); 
     } 



    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
     // Streams.close(reader); 
    } 

    return lastValue; 
} 

Testée Upto Android 4.3: SAMSUNG S3

2

Vous pouvez obtenir la taille totale de RAM en utilisant ce code:

var activityManager = GetSystemService(Activity.ActivityService) as ActivityManager; 
var memoryInfo = new ActivityManager.MemoryInfo(); 
activityManager.GetMemoryInfo(memoryInfo); 

var totalRam = memoryInfo.TotalMem/(1024 * 1024);

Si le périphérique dispose de 1 Go de RAM, totalRam sera de 1000.

+0

Votre code et vos méthodes de syntaxe ne sont pas conformes à java. Est-ce que votre code est en C# et xamarin? – amin

+0

Oui, je l'ai posté juste pour avoir une base. –

Questions connexes