2014-10-30 2 views
0

Я пытаюсь создать среду тестирования пользовательского интерфейса, и я хотел бы регистрировать все события касания и их координаты.Android logging touch

В настоящий момент у меня есть сценарии: 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); 

Кроме того, я создать ontouchlistener для oView ...

ответ

0

FLAG_WATCH_OUTSIDE_TOUCH «трюк» был безопасность эксплуатации и была исправлена ​​в Android 4.2+

Here Соответствующий раздел в источнике Andoird.

Как вы можете видеть из комментария, если прикосновение не находится внутри вашего наложения, устанавливается специальный флаг, который нулевает координаты. Это, очевидно, сделано для прекращения кейлоггеров и других прикосновений.

Единственной альтернативой я знаю, чтобы иметь корневое устройство и читать непосредственно из основного интерфейса событий ядра Linux, вызвав что-то вроде:

getevent -lt /dev/input/eventX 

из корневой оболочки. Флаг l делает вывод более понятным для человека, а флаг t будет прикреплять временные метки к выходу, если они вам понадобятся. Обратите внимание, что X является идентификатором устройства сенсорного экрана. Вы можете получить информацию о доступных устройствах с помощью команды getevent -lp, сенсорный экран - тот, который имеет события ABS_MT_POSITION_X и ABS_MT_POSITION_Y.

Обратите внимание, что данные, которые вы получите, очень низкоуровневые, и вам придется самостоятельно разобраться в чем-то полезном. Вы можете проверить linux kernel documentation on multi-touch devices для информации о том, что именно означают разные коды событий.