如何实现对Android设备进行文本的模拟输入

    • adb shell input text
    • ADBKeyBoard
    • InputManager.injectInputEvent
    • 总结

基于android的自动化测试,或者对android进行控制,ADB是不二之选,这也是官方开发成熟的工具,今天讨论的话题是“如何实现对Android设备进行文本的模拟输入”。

adb shell input text

adb提供了文本输入命令:adb shell input text “文本内容”, 该命令实现对焦点文本框进行文本输入,
这种方式只能输入AscII码的字符,对于UTF-8的字符是无法输入的,这导致中文、韩文、日文都无法输入,更别说那些火星字符了。

ADBKeyBoard

有一个项目给出了另外一种解决方案:ADBKeyBoard,它的核心原理是通过广播的方式接收文本,然后将收到的文本传递给自定义输入法,最终实现中文的文本输入,支持base64格式的文本数据。
adb shell am broadcast -a ADB_INPUT_TEXT --es msg ‘你好嗎? Hello?’
因为基于广播这种异步的技术,导致输入效率很低。

InputManager.injectInputEvent

Android提供了一套模拟输入的API,API主要存在于类InputManager中,其中的方法injectInputEvent可以用来高效的模拟键盘输入,但是该方法是隐藏方法,尽管可以通过反射来执行方法调用,但最终需要android.Manifest.permission.INJECT_EVENTS这个权限,而该权限是系统应用才能够获取的。如果是外部客户端进行控制,还需要建立网络通道进行指令发送。
如果真要使用这种方式,可以通过app_process来运行程序,进而可以突破权限的限制。基于这种方式的实现可以参考CXTouch,推荐好好看看。

总结

综合来看,最终选择哪一种方式,取决于你的实际需求场景,如果只是ASCII码字符,直接基于方案1就可以,如果想实现高效的控制,可选择InputManager的方式。

更多相关文章

  1. Android(安卓)输入法键盘和activity页面遮挡问题解决
  2. EditText的使用
  3. [Android]Android(安卓)Studio获取开发版和发布版的MD5和SHA1
  4. Android笔记-2
  5. TextView 属性详解
  6. Android用户界面 UI组件--TextView及其子类(一) TextView
  7. Android事件处理分析+Android事件处理 +Android输入事件流程
  8. android 下编译c++项目
  9. Android——EditText【输入框】的所有属性和常用属性归纳

随机推荐

  1. Android中RelativeLayout各个属性,例如:and
  2. Android系统简介
  3. Android(安卓)Studio导入Project的方法
  4. Android工具箱之组织你的代码文件
  5. android:layout_gravity 和 android:grav
  6. Android(安卓)常用技术总览
  7. 2011年,Android星光不再闪烁
  8. Android(安卓)应用程序基础知识(1)
  9. Android热更新实现原理
  10. 详解Android主流框架不可或缺的基石