2014-10-30 77 views
0

我嘗試建立一個UI測試環境,我想記錄所有觸摸事件及其座標。Android日誌觸動

目前我必須使用場景: 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

FLAG_WATCH_OUTSIDE_TOUCH「伎倆」是一個安全漏洞,並在Android的打補丁了4.2+

Here是Andoird源文件中的相關部分。

正如你可以從評論中看到的那樣,如果觸摸不在覆蓋圖內,則會設置一個特殊標誌來使座標無效。 這顯然是爲了阻止鍵盤記錄和其他觸摸劫持漏洞。

我所知道的唯一的選擇是有一個根深蒂固設備,並通過調用像從Linux底層內核事件接口直接讀取:從一個root shell

getevent -lt /dev/input/eventX 

l標誌使輸出更易讀,t標誌將時間戳附加到輸出,以防需要它們。 請注意,X是觸摸屏設備的ID。您可以使用命令getevent -lp獲得可用設備的信息,觸摸屏是具有ABS_MT_POSITION_XABS_MT_POSITION_Y事件的設備。

但是請注意,您將獲得的數據非常低,您必須自己將其解析爲有用的內容。您可以查看linux kernel documentation on multi-touch devices瞭解各種事件代碼的含義。