Подтвердить что ты не робот

Как отправить синтезированный MotionEvent через систему?

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

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

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

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

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

4b9b3361

Ответ 1

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

Это обсуждалось в некоторой степени здесь и далее.

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

Ответ 2

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

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);
}