Как отправить синтезированный MotionEvent через систему? - PullRequest
13 голосов
/ 09 марта 2011

Я знаю, как "синтезировать" MotionEvent:

  event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);

Я застрял в том, как «отправить / публиковать / запустить / распространить» его через систему, чтобы он обрабатывался «как если бы» реальный пользователь фактически касался экрана пальцем.

Возможно ли это вообще?

Если так, как мне это сделать?

Ответы [ 2 ]

17 голосов
/ 10 августа 2011

То, что вы пытаетесь сделать, вполне возможно и просто:

void simulateEventDown( View v, long x, long y )
{
    MotionEvent e = MotionEvent.obtain( SystemClock.uptimeMillis(),
                                        SystemClock.uptimeMillis(), 
                                        MotionEvent.ACTION_DOWN, 
                                        x, y, 0);
    v.dispatchTouchEvent(e);
}
4 голосов
/ 09 марта 2011

Нет, это предотвращено дизайном. Проблема заключается в том, что такую ​​функцию можно использовать для подрыва всей модели безопасности - например, путем «впрыскивания» прикосновений, чтобы связаться с рынком, договориться об установке, принять предупреждения безопасности ... все само по себе.

Это обсуждалось довольно долго здесь и далее.

Если это отвечает на ваш вопрос, пожалуйста, нажмите на галочку слева - спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...