Android日志记录触动

时间:2014-10-30 18:39:31

标签: android touch listener overlay monitor

我尝试建立一个UI测试环境,我想记录所有触摸事件及其坐标。

目前我还有方案: 1.我使用透明覆盖层成功记录了所有内容,但我无法点击下面视图上的按钮等。 2.我可以单击下面的按钮,但叠加层不会记录坐标...

不幸的是两个都行不通。因此,我想知道两者是否有任何作用?

谢谢!

叠加窗口的代码段:

oView = new LinearLayout(this);  
oView.setBackgroundColor(0x88ff0000); // The translucent red color
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |  WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSPARENT);       
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(oView, params);

此外,我为oView创建了一个ontouchlistener ...

1 个答案:

答案 0 :(得分:0)

FLAG_WATCH_OUTSIDE_TOUCH“技巧”是一个安全漏洞,并在Android 4.2 +

中进行了修补

Here是Andoird资源中的相关部分。

从注释中可以看出,如果触摸不在覆盖范围内,则会设置一个特殊标记,使坐标为空。 这显然是为了阻止键盘记录和其他触摸劫持攻击。

我所知道的唯一选择是拥有一个root设备,并通过调用类似的东西直接从底层的linux内核事件接口读取:

getevent -lt /dev/input/eventX

来自root shell。 l标志使输出更易于阅读,t标志会将时间戳附加到输出,以备不时之需。 请注意,X是触摸屏设备的ID。您可以使用getevent -lp命令获取有关可用设备的信息,触摸屏是包含ABS_MT_POSITION_XABS_MT_POSITION_Y事件的触摸屏。

但请注意,您获得的数据非常低级,您必须自己解析一些有用的数据。您可以查看linux kernel documentation on multi-touch devices,了解各种事件代码的确切含​​义。