如何实现对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关于线程更新UI的方法
  2. Android笔记 - 常见错误解决方法 | Android common erros and so
  3. Android 线程优先级设置方法
  4. android开发之设置Edittext密码的方法
  5. Android TextView文字链接4中方法
  6. Android--布局方式(LinearLayout)学习
  7. Android中的几种网络请求方式详解
  8. Android锁定横竖屏、splash,全屏、去除标题的方法-网摘

随机推荐

  1. android studio中直接运行java程序
  2. Android多Module下的Application引用方式
  3. Android(安卓)Bitmap垂直翻转
  4. android4.3 截屏功能的尝试与失败分析
  5. Android命令行编译方法,不用Eclipse IDE
  6. Android中数据存储方式一:文件形式
  7. android开发-界面设计基本知识Ⅲ
  8. 【Android(安卓)frameLayout布局】使用fr
  9. Java bit, byte, 基本数据类型
  10. android实时视频网络传输方案总结