我尝试建立一个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 ...
答案 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_X
和ABS_MT_POSITION_Y
事件的触摸屏。
但请注意,您获得的数据非常低级,您必须自己解析一些有用的数据。您可以查看linux kernel documentation on multi-touch devices,了解各种事件代码的确切含义。