Android 模拟按键,模拟触摸点击,模拟滑动

 (1)模拟按键发送事件

1.1 在dispatchKeyvent中直接替换按键Code

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        //有些定制机没有左右键,用上下键和音量加减键模拟左右键,控制音量大小。
        if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
            event.setKeyCode(KeyEvent.KEYCODE_DPAD_RIGHT);
        } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN) {
            event.setKeyCode(KeyEvent.KEYCODE_DPAD_LEFT);
        }else if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP){//音量上键
            event.setKeyCode(KeyEvent.KEYCODE_DPAD_RIGHT);//右键
        }else if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
            event.setKeyCode(KeyEvent.KEYCODE_DPAD_LEFT);
        }
        return super.dispatchKeyEvent(event);
    }

1.2 监听某个按键,替换按键code

mTitle.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                //返回键专门用来返回,删除功能由A3完成.
                if(KeyEvent.KEYCODE_BACK == keyEvent.getKeyCode()){
                    onBackPressed();
                    return true;
                }

                //A3专门作为删除字符串作用.
                if(KeyEvent.KEYCODE_A3 == keyEvent.getKeyCode() && KeyEvent.ACTION_DOWN == keyEvent.getAction()){
                    keyEvent.setKeyCode(KeyEvent.KEYCODE_DEL);//删除字符串
                    mTitle.dispatchKeyEvent(keyEvent);
                    return true;
                }
                return false;
            }
        });

简单的代码,记录一下。

(2)模拟触摸点击,和模拟滑动,有些场景可能会用到。
   @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        WindowManager win=getWindowManager();
        Display display=win.getDefaultDisplay();
        int width=display.getWidth();
        int height=display.getHeight();

        if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
            //点击屏幕中点
            setMouseClick(width/2,height/2);
        }else if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){
            //向右滑动屏幕
            onFling(width/2,height/2,"right");
        }else if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){
            //向左滑动屏幕
            onFling(width/2,height/2,"left");
        }
        return super.onKeyUp(keyCode, event);
    }


   //模拟触摸点击
    public void setMouseClick(int x, int y){
        MotionEvent evenDownt = MotionEvent.obtain(System.currentTimeMillis(),
                System.currentTimeMillis() + 100, MotionEvent.ACTION_DOWN, x, y, 0);
        dispatchTouchEvent(evenDownt);
        MotionEvent eventUp = MotionEvent.obtain(System.currentTimeMillis(),
                System.currentTimeMillis() + 100, MotionEvent.ACTION_UP, x, y, 0);
        dispatchTouchEvent(eventUp);
        evenDownt.recycle();
        eventUp.recycle();
    }

    //模拟滑动
    public void onFling(final int x, final int y,final String leftRight){
        new Thread(new Runnable() {
            @Override
            public void run() {
                Instrumentation inst = new Instrumentation();
                long dowTime = SystemClock.uptimeMillis();
                int distance=0;
                if(leftRight.equals("right")){//right,next
                    distance=x-20;
                }else{//left,previous
                    distance=x+20;
                }
                inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime,
                        MotionEvent.ACTION_DOWN, x, y,0));
                inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime,
                        MotionEvent.ACTION_MOVE, x, y,0));
                inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+20,
                        MotionEvent.ACTION_MOVE, distance, y,0));
                inst.sendPointerSync(MotionEvent.obtain(dowTime,dowTime+20,
                        MotionEvent.ACTION_UP, distance, y,0));
                inst.setInTouchMode(false);//如果是键盘机,不能是触摸模式,否则无焦点
            }
        }).start();
    }
    
    参考来源:
    https://www.cnblogs.com/zhujiabin/p/6971475.html
    https://blog.csdn.net/linghaidong/article/details/53408002

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 类似按键精灵脚本录制项目是指一种与按键精灵类似的应用程序,可以录制和播放一系列Android设备上的操作步骤,从而实现自动化操作。 这样的项目通常由以下几个主要组件构成: 1. 脚本录制功能:用户可以通过点击滑动、输入文本等操作步骤来录制脚本。录制过程中会记录每个操作的类型、位置和参数。 2. 脚本编辑功能:用户可以对录制的脚本进行编辑,例如调整操作的顺序、修改参数等。 3. 脚本播放功能:用户可以选择播放已录制的脚本,系统会自动模拟用户在设备上的操作步骤进行自动化操作。 4. 脚本管理功能:用户可以对录制的脚本进行保存、导入、导出和删除等管理操作,方便后续的使用和维护。 实现这样一个项目需要掌握Android应用开发的相关技术,例如: 1. Android图形界面开发:使用Android的界面组件来实现用户界面的设计和交互。 2. Android事件处理:监听用户的触摸滑动等事件,并记录下来用于脚本录制。 3. 脚本编写与解析:将录制的操作转化为可执行的脚本代码,并将代码解析为对应的操作步骤。 4. 设备模拟与控制:通过模拟鼠标点击、键盘输入等操作,实现自动化操作。 此外,为了确保项目的成功,还需要进行一定的测试和优化。例如,针对不同设备分辨率、系统版本和应用程序差异,进行充分的测试和适配工作,提高应用的兼容性和稳定性。 总结来说,Android 类似按键精灵脚本录制项目是一种实现自动化操作的应用程序,通过录制和播放一系列操作步骤,提高用户的效率和体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值