Android记录手机屏幕操作并进行回放(需要root权限)

首先介绍一下需求,做一个功能模块把手机的操作记录下来,然后进行把这些操作回放出来。当接到这样的需求时,我内心其实是拒绝的,奈何反抗无效,我也只好默默接受这个非人的需求了。但是怎么入手呢,一点思路都没有,后来去查资料,知道可以通过adb命令来执行手机的点击和滑动操作,但是怎么记录呢?
难点:
1.获取屏幕的触摸事件,本应用的activity已经不再显示。所以不能通过监听activity的触摸事件来获取屏幕坐标和事件。
2.开启服务去监听屏幕的触摸事件,但是服务中又获取不到屏幕的事件
3.使用现在主流测试框架Robotium和Uiautomator,借用Robotium Recorder和UiautomatorViewer这两个插件,但是这就需要借用pc才能 完成,不满足需求。怎么办 ???
后来想到在屏幕上放一层透明的界面,然后在监听界面上的触摸事件,但是怎么把这个界面放到手机上去呢,看了看Toast中的TN源码,找到了WindowManager这个类。来一起看看代码

  private void execShellCmd(String record) {
        // 申请获取root权限,这一步很重要,不然会没有作用
        try {
//           左滑命令              
//             record =  " input swipe 0 700 360 700\n" +
//                    "sleep 2\n" +
//                    " input swipe 0 700 360 700\n" +
//                    "sleep 2\n" +
//                    " input swipe 0 700 360 700\n" +
//                    "sleep 2\n" +
//                    " ";
               process = Runtime.getRuntime().exec("su");
            // 获取输出流
            outputStream = process.getOutputStream();
            os = new DataOutputStream(outputStream);
            os.writeBytes(record);
            os.flush();
            os.close();
            outputStream.close();

上面的就是调用adb命令,让手机自己实现点击和滑动(点击使用input tap,滑动使用input swipe)。

final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.MATCH_PARENT; 
params.width = WindowManager.LayoutParams.MATCH_PARENT; 
params.format = PixelFormat.TRANSLUCENT;
params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
        |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; 
sore = View.inflate(SaveService.this, R.layout.tip, null);
 wm.addView(sore, params);

通过WindowManager这个类,我们把一个透明的界面放在手机上,然后就可以记录手机的操作了。当然了,这样实现的弊端也是有的,当我们录制脚本的时候,操作第一次的时候是记录操作并让界面隐藏,让这个界面不在处理触摸事件,然后在到下一个界面,有点繁琐。后面有好的思路在慢慢改进吧

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值