2014-01-25 16 views
1

Здесь я хочу вызвать метод android.view.View :: dispatchPointerEvent. Когда я делаю это, я получаю следующее исключение:Android Reflection - вызов метода

java.lang.IllegalArgumentException: expected receiver of type android.view.View, but got java.lang.Class<android.view.View> 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.infostretch.automateme.Main.injectMyCrap(Main.java:75) 
     at com.infostretch.automateme.MainActivity$1.onClick(MainActivity.java:33) 
     at android.view.View.performClick(View.java:4202) 
     at android.view.View$PerformClick.run(View.java:17340) 
     at android.os.Handler.handleCallback(Handler.java:725) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5039) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     at com.android.internal.os.ZygoteInit.main(Native Method) 
     at dalvik.system.NativeStart.main(Native Method) 

Вот код

static void injectMyCrap() { 
    Log.i("JSLock-injectMyCrap","I got called"); 
    Class _class = null; 

    try { 
     _class = Class.forName("android.view.View"); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    Method method = null; 
    try { 

     method = _class.getMethod("dispatchPointerEvent", MotionEvent.class); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } 
    try { 
     MotionEvent evntDown = MotionEvent.obtain(SystemClock.uptimeMillis(), 
       SystemClock.uptimeMillis(), 
       MotionEvent.ACTION_DOWN, 
       10, 10, 0); 
     method.invoke(_class,evntDown); 

     MotionEvent evntUp = MotionEvent.obtain(SystemClock.uptimeMillis(), 
       SystemClock.uptimeMillis(), 
       MotionEvent.ACTION_UP, 
       10, 10, 0); 
     method.invoke(_class,evntUp); 

    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 

} 

Или может быть мне нужно создать STUB? Я не знаю, как, любая помощь?

ответ

0

Вы должны отправить его в объект View: (View) method.invoke (_class, eventUp);

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