2012-06-20 29 views
2

我想獲得dumpsys統計信息[就像dumpsys cpuinfo,dumpsys電池]。我在java中執行這些並將其寫入文件。但我得到,在Java中Dumpsys權限拒絕

2012.06.20 07:32:19 
Permission Denial: can't dump cpuinfo from from pid=862, uid=10040 without permission android.permission.DUMP 
for all dumpsys commands. 

我已經加入許可"android.permission.DUMP"和android.manifest "android.permission.BATTERY_STATS"。但是,沒有獲得resulyPlease的幫助,因爲我用它critical.The代碼如下其中cmd包含dumpsys或cpuinfo中電池dumpsys [人]

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 
System.setOut(new PrintStream(new FileOutputStream("/sdcard/Monitor/"+file+".txt",false))); 
System.out.println("\n\n"+sdf.format(cal.getTime()));   
Log.w("cmd-fn", cmd); 
process=Runtime.getRuntime().exec(cmd); 
process.waitFor(); 
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
String buffer=""; 

while((buffer=bufferedReader.readLine())!=null) 
     { 
    //fileobj.write(buffer); 
    System.out.println(buffer); 
    //output.write(buffer); 
} 
    buffer=""; 
    BufferedReader buffered = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
    while((buffer=buffered.readLine())!=null) 
     { 
     Log.w("exception",buffer); 
     } 

下面是我的清單條目

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.DUMP" /> 
<uses-permission android:name="android.permission.BATTERY_STATS" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
+0

顯示您的manifest.xml –

+0

下面是我的maniest文件。請幫助<?xml version =「1.0」encoding =「utf-8」?> <使用權限android:name =」android.permission.DUMP「/> <使用權限android:name =」android.permission.BATTERY_STATS「/> <使用權限android:name =」 android.permission.READ_PHONE_STATE「/> – vinod

+0

嘗試在使用sdk後添加權限 –

回答

9

轉儲權限定義爲android:protectionLevel="signatureOrSystem",因此除非您的應用程序使用平臺密鑰簽名或安裝在系統分區中,否則您將無法獲取該權限。

+0

如何做到這一點?請幫忙 – vinod

+0

@Nick還有沒有其他方法可以將android:protectionLevel更改爲其他類似正常的值並使其正常工作?否則,如何讓您的應用程序使用平臺密鑰進行簽名? – vinod

+0

如果您沒有構建自定義固件(ROM),唯一的辦法是根據手機。 –

-1

您可以通過檢查/ proc/meminfo文件來訪問一些內存信息,/ proc /下還有其他的intersting文件。希望這些文件將是可讀的在未來的版本

代碼示例meminfo中獲取:

public static String showMemInfo() { 
    StringBuilder meminfo = new StringBuilder(); 
    try { 
     ArrayList<String> commandLine = new ArrayList<String>(); 
     commandLine.add("cat"); 
     commandLine.add("/proc/meminfo"); 

     Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[commandLine.size()])); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
      meminfo.append(line); 
      meminfo.append("\n"); 
     } 

    } catch (IOException e) { 
     Log.e(LOG_TAG, "Could not read /proc/meminfo", e); 
    } 

    return meminfo.toString(); 
} 

PS:我知道這不是冗長像dumpsys;)

-1

有,你可以用它來獲取CPU信息的另外兩種方式

  1. 使用top命令INT亞行外殼,獲得最多的信息

    top -n 1 
    
  2. 你也可以在/ proc/stat和/ proc/pid/stat中獲取信息以獲取cpu信息

    cat /proc/stat 
    

    如果你想詳細信息,請Get Memeory Usage