我正在尝试获取dumpsys统计信息[如dumpsys cpuinfo,dumpsys battery]。我在java中执行这些并将其写入文件。但我得到了,
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.manifest中添加了权限"android.permission.DUMP"
和"android.permission.BATTERY_STATS"
。但是,没有获得resulyPlease帮助作为其关键。我使用的代码如下所示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 :(得分:9)
DUMP权限定义为android:protectionLevel="signatureOrSystem"
,因此除非您的应用程序使用平台密钥签名或安装在系统分区中,否则无法获取该权限。
答案 1 :(得分:2)
Android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用才能获得它们。
答案 2 :(得分:-1)
您可以通过检查/ proc / meminfo文件来访问某些内存信息,/ proc /下还有其他有趣的文件。希望这些文件在将来的版本中可读;
获取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那样冗长;)
答案 3 :(得分:-1)
您还可以使用其他两种方法来获取cpu信息
使用top命令int adb shell,获取大部分信息
top -n 1
您还可以在/ proc / stat和/ proc / pid / stat中获取信息以获取cpu信息
cat /proc/stat
如果您想了解详情,请查看Get Memeory Usage