2011-04-26 3 views
0

에 ProcessBuilder를 작동하지 않습니다 MemTotal가 grep을하지 않는 경우파이프 ("|")와 GREP 내가 안드로이드에 총 RAM을 얻으려면 안드로이드

 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 result; 
     } 

은, 고양이가 나에게 메모리에 대한 전체 정보를 반환 . grep을 사용하여 한 줄을 만들고 싶을 때 나는 아무것도 얻지 못합니다. 이 문제를 어떻게 해결할 수 있습니까? 이 순간에 총 가용 RAM을 얻고 싶습니다.

답변

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(); 
} 
3

모든 종류의 리다이렉션 (|,, >, <, ...)은 쉘에 의해 처리됩니다. 셸을 호출하지 않으면 사용할 수 없습니다.

깨끗한 해결책은 Java 코드에서 /proc/meminfo을 읽고 문자열 MemTotal을 수동으로 검색하는 것입니다. 이 코드는 현재하고있는 것보다 오래 걸리지 않으므로 훨씬 적은 양의 힘이 필요합니다.

관련 문제