Android Question Create MotionEvent for auto click app,or auto tuch

Discussion in 'Android Questions' started by xiaoyao, Jan 17, 2015.

  1. xiaoyao

    xiaoyao Member Licensed User

    Dim r As Reflector
    Dim motion1 As Object
    r.Target = r.GetContext
    'cwm = r.RunMethod2("getSystemService", "window", "java.lang.String")

    uptime = r.RunStaticMethod("android.os.SystemClock", "uptimeMillis", Null, Null)
    'Msgbox("uptime" & uptime,"")
    eltime=uptime+100

    'Msgbox("uptime" & uptime,"")
    'Private ACTION_UP = 1, ACTION_MOVE = 2, ACTION_DOWN = 0 As Int
    motion1=r.RunStaticMethod("android.view.MotionEvent","obtain",Array As Object( uptime,eltime,0, 300,300,0),Array As String("java.lang.long","java.lang.long","java.lang.int","java.lang.float","java.lang.float","java.lang.int"))
    r.Target=Panel1
    'sendPointerSync
    r.RunMethod4("onTouchEvent", Array As Object(motion1), Array As String("android.view.MotionEvent"))

    r.Target = r.GetContext
    motion1=r.RunStaticMethod("android.view.MotionEvent","obtain",Array As Object( uptime,eltime,1, 300,300,0),Array As String("java.lang.long","java.lang.long","java.lang.int","java.lang.float","java.lang.float","java.lang.int"))
    r.Target=Panel1
    r.RunMethod4("onTouchEvent", Array As Object(motion1), Array As String("android.view.MotionEvent"))
    'http://www.b4x.com/android/forum/threads/action_pointer_down-etc.36990/#content
     
  2. xiaoyao

    xiaoyao Member Licensed User

    通过Socket + Instrumentation实现模拟键盘鼠标事件主要通过以下三个部分组成:
    l Socket编程:实现PC和Emulator通讯,并进行循环监听
    l Service服务:将Socket的监听程序放在Service中,从而达到后台运行的目的。这里要说明的是启动服务有两种方式,bindService和startService,两者的区别是,前者会使启动的Service随着启动Service的Activity的消亡而消亡,而startService则不会这样,除非显式调用stopService,否则一直会在后台运行因为Service需要通过一个Activity来进行启动,所以采用startService更适合当前的情形
    l Instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:
    sendCharacterSync(int keyCode) //用于发送指定KeyCode的按键
    sendKeyDownUpSync(int key) //用于发送指定KeyCode的按键
    sendPointerSync(MotionEvent event) //用于模拟Touch
    sendStringSync(String text) //用于发送字符串
    注意:以上函数必须通过Message的形式抛到Message队列中。如果直接进行调用加会导致程序崩溃。

    对于Socket编程和Service网上有很多成功的范例,此文不再累述,下面着重介绍一下发送键盘鼠标模拟事件的代码:
    1. 发送键盘KeyCode:
    步骤1. 声明类handler变量
    private static Handler handler;

    步骤2. 循环处理Message
    //在Activity的onCreate方法中对下列函数进行调用
    private void createMessageHandleThread(){
    //need start a thread to raise looper, otherwise it will be blocked
    Thread t = new Thread() {
    public void run() {
    Log.i( TAG,"Creating handler ..." );
    Looper.prepare();
    handler = new Handler(){
    public void handleMessage(Message msg) {
    //process incoming messages here
    }
    };
    Looper.loop();
    Log.i( TAG, "Looper thread ends" );
    }
    };
    t.start();
    }

    步骤3. 在接收到Socket中的传递信息后抛出Message
    handler.post( new Runnable() {
    public void run() {
    Instrumentation inst=new Instrumentation();
    inst.sendKeyDownUpSync(keyCode);
    }
    } );

    2. Touch指定坐标,如下例子即touch point(240,400)
    Instrumentation inst=new Instrumentation();
    inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 240, 400, 0));
    inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 240, 400, 0));

    3. 模拟滑动轨迹
    将上述方法中间添加 MotionEvent.ACTION_MOVE
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    Is this a question?
     
    hani bassam likes this.
  4. xiaoyao

    xiaoyao Member Licensed User

    i want to click other app,but it's err ,how can i do?i find some code in website ,but it's java code ,how do in B4A?

    Instrumentation,sendPointerSync,sendKeyDownUpSync,HOW CAN I DO IN B4A?
     
  5. Erel

    Erel Administrator Staff Member Licensed User

    You cannot send events to other apps. The instrumentation API will not help (it can only be used to send events to its own process).
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice