2012-05-02 3 views
4

Хотя есть много примеров, показывающих, что что-то вроде этого должно работать, следующий код выходит из строя. Этот код находится в тестовом проекте, который связан с реальным проектом.Как исправить исключение разрешения 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 
+0

Возможно, вам понадобится корневое устройство, проверьте ответ [здесь] (http://stackoverflow.com/questions/5635486/android-keyevent-injection-требует-системных разрешений) и [здесь] (http://stackoverflow.com/questions/5383401/android-inject-events-permission). – yorkw

+0

+2

Ваше приложение должно быть системным приложением, чтобы иметь разрешение android.permission.INJECT_EVENTS. – Naren

ответ

3

Это, вероятно, означает, что ваш главный проект, ваш тестовый проект или ваши версии эмулятора не синхронизированы.

-1

Это может помочь другим.

Проблема мы получили это

Не удалось выполнить жест. java.lang.SecurityException: Инъекция в другое приложение требует INJECT_EVENTS разрешения (RuntimeError ")

В моем случае проблема была с

Сеть не подключена

Once. исправлено сообщение о сетевом подключении, запущены тесты.

 Смежные вопросы

  • Нет связанных вопросов^_^