Хотя есть много примеров, показывающих, что что-то вроде этого должно работать, следующий код выходит из строя. Этот код находится в тестовом проекте, который связан с реальным проектом.Как исправить исключение разрешения INJECT_EVENT при отправке касаний к тесту ActivityInstrumentationTestCase2
public class MyTest extends ActivityInstrumentationTestCase2<MyActivity> {
public MyTest(String name)
{
super("com.mypackage.activities", MyActivity.class);
setName(name);
}
public void testTap() throws Throwable
{
//Required by MotionEvent.obtain according to JavaDocs
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
Instrumentation i = getInstrumentation();
//Setup the info needed for our down and up events to create a tap
MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 300, 20, 0);
MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 300, 20, 0);
//Send the down/up tap event
i.sendPointerSync(downEvent);
i.sendPointerSync(upEvent);
//Delay to see the results
Thread.currentThread().sleep(3000);
}
}
Это бросает java.lang.SecurityException: Инъекция в другое приложение требует разрешения INJECT_EVENTS на i.sendPointerSync() вызывает. Я также пробовал view.onTouchEvent (event) и view.dispatchTouchEvent (событие) без успеха.
Единственное, о чем я могу думать, - это примеры, когда это работает, в тестируемом проекте. Это, кажется, плохо, потому что рекомендация заключается в разделении тестов на другой проект, и иметь возможность запускать их с сервера сборки что-то вроде:
adb -e shell am instrument -w com.mypackage.activities.test/android.test.InstrumentationTestRunner
Возможно, вам понадобится корневое устройство, проверьте ответ [здесь] (http://stackoverflow.com/questions/5635486/android-keyevent-injection-требует-системных разрешений) и [здесь] (http://stackoverflow.com/questions/5383401/android-inject-events-permission). – yorkw
Ваше приложение должно быть системным приложением, чтобы иметь разрешение android.permission.INJECT_EVENTS. – Naren