Android开发中如何模拟输入

 更新时间:2021年03月15日 14:55:36   作者:可爱的黑精灵  
这篇文章主要介绍了Android开发中如何模拟输入,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

主要思路是使用 adb shell input指令来模拟按键及触摸输入。

但是前提是需要root,且华为手机出于安全考虑已经停止了root解码。所以测试建议换个别的手机。或是直接用AS中的模拟器,用有Google Apis的版本。

input 指令

我们打开adb,进入shell,输入input可以看到指令的参数说明。

其中source一般都是用的默认值可以忽略,我们主要关注的就是后面的command

  • text:文本输入;keyevent:键盘按键;这两条指令是所有设备通用的。
  • tap:点击屏幕;swipe:滑动屏幕;这两条指令适用于有触摸屏的设备。
  • press,roll适用于有触摸球的设备。

模拟输入

在使用input指令之前我们要先获取一下root权限。

private void execShellCmd(String cmd) { 
 
 try { 
 Process process = Runtime.getRuntime().exec("su"); 

 OutputStream outputStream = process.getOutputStream(); 
 DataOutputStream dataOutputStream = new DataOutputStream( 
  outputStream); 
 dataOutputStream.writeBytes(cmd); 
 dataOutputStream.flush(); 
 dataOutputStream.close(); 
 outputStream.close(); 
 } catch (Throwable t) { 
 t.printStackTrace(); 
 } 
}

text

1.输入之前需要提前获取焦点。
2.输入有特殊含义的特殊字符,无法直接输入 需要使用keyevent 如: ' '

我们整一个EditText,然后进行text输入测试。

execShellCmd("input text 'hello,world'");

我们发现少了一个H,在控制台可以看到日志。

可以看到在按下H的时候,EditText没有获取到焦点。

可能是页面初始化以后就开始执行输入操作,此时editText还没有获取到焦点,获取焦点可能存在点延时。所以我们尝试延迟1s后进行输入。

private Handler handler = new Handler();
private Runnable task = new Runnable() {
 public void run() {
 execShellCmd("input text 'hello,world'");
 }
};

// 延迟1s后输入
handler.postDelayed(task,1000);

keyevent

execShellCmd("input text 'hello,world' \n input keyevent 68 \n input keyevent 21");

输入hello,world,然后输入',然后左移光标

常见的keycode可以参见frameworks/base/core/java/android/view/KeyEvent.java

tap

android 中坐标系如下图所示。

我们可以打开手机中的 开发者选项 -> 指针位置 来辅助定位,可以再上方看到x,y相对的偏移量。

点击屏幕(100,200)位置。

execShellCmd("input tap 100 200");

swipe

滑动屏幕和tap相似只需要传入两个坐标即可。后面也可以设置滑动时间(ms),时间越短滑动的相应距离就会越长。

从屏幕(100,200)滑动到(300,400)。

execShellCmd("input swipe 100 200 300 400");

以上就是Android开发中如何模拟输入的详细内容,更多关于Android 模拟输入的资料请关注脚本之家其它相关文章!

相关文章

  • Android RecyclerView实现拼团倒计时列表实例代码

    Android RecyclerView实现拼团倒计时列表实例代码

    这篇文章主要给大家介绍了关于Android RecyclerView实现拼团倒计时列表的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Android 获取设备屏幕大小的几种方法总结

    Android 获取设备屏幕大小的几种方法总结

    这篇文章主要介绍了Android 获取设备屏幕大小的几种方法总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • Android中实现GPS定位的简单例子

    Android中实现GPS定位的简单例子

    这篇文章主要介绍了Android中实现GPS定位的简单例子,例子逻辑清晰,但相对简单了些,需要的朋友可以参考下
    2014-07-07
  • 谈谈对Android View事件分发机制的理解

    谈谈对Android View事件分发机制的理解

    本篇文章主要介绍了谈谈对Android View事件分发机制的理解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Android 添加系统设置属性的实现及步骤

    Android 添加系统设置属性的实现及步骤

    这篇文章主要介绍了Android 添加系统设置属性的实现及步骤的相关资料,需要的朋友可以参考下
    2017-07-07
  • Android实现视频弹幕功能

    Android实现视频弹幕功能

    这篇文章主要为大家详细介绍了Android实现视频弹幕功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Kotlin协程开发之Flow的融合与Channel容量及溢出策略介绍

    Kotlin协程开发之Flow的融合与Channel容量及溢出策略介绍

    这篇文章主要介绍了Kotlin协程:Flow的融合、Channel容量、溢出策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • Android Dialog对话框详解

    Android Dialog对话框详解

    这篇文章主要介绍了Android Dialog对话框详解的相关资料,需要的朋友可以参考下
    2016-03-03
  • 基于Android ListView之加载使用技巧

    基于Android ListView之加载使用技巧

    本篇文章小编为大家介绍,基于Android ListView之加载使用技巧。需要的朋友参考下
    2013-04-04
  • Android使用GRPC进行通信过程解析

    Android使用GRPC进行通信过程解析

    这篇文章主要给大家介绍了在Android上使用grpc的方法教程,文中通过示例代码给大家详细介绍了在android上使用grpc的方法以及可能遇到的种种问题的解决方法,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2023-02-02

最新评论