android获取用户输入getevent

process-z.com 2014-08-03 12:21:45
我想获取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键按下。)
...全文
1129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_23334853 2016-03-07
  • 打赏
  • 举报
回复
你这个问题解决了吗?
kecengsheji 2014-10-09
  • 打赏
  • 举报
回复
因为我做的算是定制机器 后来是让厂商帮忙写了服务 我用socket去连接他这个服务 有触摸就返回1 无触摸就返回0 我问他 他说也是用getevent这个事件写的
process-z.com 2014-10-02
  • 打赏
  • 举报
回复
引用 1 楼 kecengsheji 的回复:
你好 请问你这个问题解决了吗 我也碰到了
后来没做了,你解决了么
kecengsheji 2014-09-13
  • 打赏
  • 举报
回复
你好 请问你这个问题解决了吗 我也碰到了

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧