我想获取android的点击事件,加上时间戳并记录。
在adb shell中,获取最高权限后可以监控设备事件,如图
然后我们知道android中有个Runtime.getRuntime().exec()方法,可以相当于在linux内核中执行命令,现在我想像上面一样,直接在/dev/input/event里获取event。
TextView cmd_text = (TextView)findViewById(R.id.cmdtext);
Runtime rt = Runtime.getRuntime();
Process process = null;
public void getevent(View v){
do_exec("su",process);
do_exec("getevent",process);
}
String do_exec(String cmd,Process p) {
String s = "\n";
try {
p = rt.exec(cmd);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
s += line + "\n";
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cmd_text.setText(s);
return cmd;
}
出现提示成功获取Root权限,但是在执行getevent时卡住
LogCat:
08-02 23:42:04.660: I/dalvikvm(14804): threadid=3: reacting to signal 3
08-02 23:42:04.754: I/dalvikvm(14804): Wrote stack traces to '/data/anr/traces.txt'
请问要怎么获取到event事件?谢谢!
(PS:和gentevent相对的sendevent已经可以实现。
把dev/input/event0的权限改为666,然后执行
public void sendevent(View v){
do_exec("sendevent /dev/input/event0 1 158 1",process);
do_exec("sendevent /dev/input/event0 0 0 0",process);
do_exec("sendevent /dev/input/event0 1 158 0",process);
do_exec("sendevent /dev/input/event0 0 0 0",process);
}
可以模拟手机power键按下。)