#java #android #processbuilder
#java #Android #processbuilder
Вопрос:
Я хочу получить общий объем оперативной памяти на Android:
private String getTotalRAM()
{
ProcessBuilder cmd;
String result="";
try{
String[] args = {"/system/bin/sh", "-c", "cat -n /proc/meminfo | grep MemTotal"};
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[1024];
while(in.read(re) != -1){
System.out.println(new String(re));
result = result new String(re);
}
in.close();
} catch(IOException ex){
ex.printStackTrace();
}
return resu<
}
Если нет grep MemTotal, cat возвращает мне полную информацию о памяти. Когда я хочу получить только одну строку с помощью grep, я ничего не получаю. Как я могу это исправить? Я просто хочу получить общую доступную оперативную память на данный момент.
Ответ №1:
Все виды перенаправлений ( |
, >
, <
, …) обрабатываются командной оболочкой. Если вы не вызываете оболочку, вы не сможете их использовать.
Простым решением было бы прочитать /proc/meminfo
ваш Java-код и выполнить простой поиск строки MemTotal
вручную. Код был бы ненамного длиннее того, что вы делаете сейчас, и требовал бы намного меньше повторных операций.
Ответ №2:
Как предполагает @Joachim, вы, вероятно, обнаружите, что это работает для вас.
BufferedReader pmi = new BufferedReader(new FileReader("/proc/meminfo"));
try {
String line;
while ((line = pmi.readLine()) != null)
if (line.contains("MemTotal"))
// get the second word as a long.
return Long.parseLong(line.split(" ",3)[1]);
return -1;
} finally {
pmi.close();
}