zoukankan      html  css  js  c++  java
  • Android Send event 汇总 (点击,滑动,两指操作 源码)

    UiAutomation 跨应用操作三大利器:

    setOnAccessibilityEventListener() 开启Accessibility

    executeShellCommand() 执行shell命令(权限比Runtime.getRuntime().exec()高,相当于adb shell)

    injectInputEvent() 注入事件,比如点击。


    EventCode
    public static final int ACTION_DOWN             = 0;
    public static final int ACTION_UP               = 1;
    public static final int ACTION_MOVE             = 2;

    先看看send event的方法:

    Send Event

    1.Instrumentation

    Instrumentation inst = new Instrumentation();
    nst.sendPointerSync

    2.Uiautomation

    mUiAutomation.injectInputEvent

    3.IWindowManager

    IWindowManager.Stub.asInterface(ServiceManager.getService("window"));

    4.InputManager

    MotionEvent me = getEvent();
    InputManager.getInstance().injectInputEvent(me, 1)

     5.IWindowManager 

    IBinder wmbinder = ServiceManager.getService( "window" ); 
    IWindowManager m_WndManager = IWindowManager.Stub.asInterface( wmbinder ); 
    // key down 
    m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A ),true ); 
    // key up
    
    m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_UP, KeyEvent.KEYCODE_A ),true );

    6./dev/input/eventX  这个需要权限哦

    Touch

    MotionEvent event = MotionEvent.obtain(downTime, eventTime, 0, (float) x, (float) y, 0);  //dowm
    inst.sendPointerSync(MotionEvent.obtain(300 + downTime, 300 + eventTime, 1, (float) x, (float) y, 0)); //up

    Swipe

       xStep = (double)(upX - downX) / (double)swipeSteps;
            yStep = (double)(upY - downY) / (double)swipeSteps;
            ret = this.touchDown(downX, downY);
            if(drag) {
                SystemClock.sleep(this.mUiAutomatorBridge.getSystemLongPressTime());
            }
    
            for(int i = 1; i < swipeSteps; ++i) {
                ret &= this.touchMove(downX + (int)(xStep * (double)i), downY + (int)(yStep * (double)i));
                if(!ret) {
                    break;
                }
    
                SystemClock.sleep(5L);
            }
    
            if(drag) {
                SystemClock.sleep(100L);
            }
    
            ret &= this.touchUp(upX, upY);
    pinchOpen
      private static MotionEvent getMotionEvent(long downTime, long eventTime, int action, List<PointerProperties> properties, List<PointerCoords> coordinates) {
            PointerProperties[] props = (PointerProperties[])properties.toArray(new PointerProperties[properties.size()]);
            PointerCoords[] coords = (PointerCoords[])coordinates.toArray(new PointerCoords[coordinates.size()]);
            return MotionEvent.obtain(downTime, eventTime, action, props.length, props, coords, 0, 0, 1.0F, 1.0F, 0, 0, 4098, 0);
        }


  • 相关阅读:
    卷积神经网络的权值参数个数的量化分析
    Torch 的安装与基本用法
    Torch 的安装与基本用法
    操作系统的 (program)loader(程序加载器)
    操作系统的 (program)loader(程序加载器)
    Python 模块学习:os模块
    Python 正则表达式-OK
    Perl参考函数
    svn: E200030: sqlite[S10]: disk I/O error
    Perl调用外部命令的方式和区别
  • 原文地址:https://www.cnblogs.com/season-xie/p/6345320.html
Copyright © 2011-2022 走看看