Android 注入Event
来源:互联网 发布:冒充淘宝客服退款诈骗 编辑:程序博客网 时间:2024/06/05 02:32
Android在自动化测试的过程中经常会涉及到注入event的场景,通过参考网上资料大概分为两种:
1. 通过instrumentation注入。
查看instrumentation 的源码会发现,会有很多send开头的方法:
随便选取其中的一个方法:
public void sendPointerSync(MotionEvent event) { validateNotAppThread(); if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) == 0) { event.setSource(InputDevice.SOURCE_TOUCHSCREEN); } InputManager.getInstance().injectInputEvent(event, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH); }
不难看出其中其实是调用了 InputManager 类来实现事件输入,这里不具体展开,补充一个简单的例子。
Instrumentation inst = new Instrumentation(); inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
上面例子输入了一个 KEYCODE_BACK 返回键操作。
2.通过在系统目录下注入。( /dev/input/eventX)
为了说明这种方式,先铺垫下/dev/input/eventX。
手机(必须是root的)连接usb,通过shell命令进到这个目录,然后ls :
出现event 开头的几个输入设备的节点。
在命令行输入: adb shell getevent ,随意点击手机观察控制台:
/dev/input/event4: 0003 0039 00000000/dev/input/event4: 0000 0002 00000000/dev/input/event4: 0000 0000 00000000/dev/input/event4: 0003 003a 0000004d/dev/input/event4: 0003 0035 000001ec/dev/input/event4: 0003 0036 000004a9/dev/input/event4: 0003 0039 00000000/dev/input/event4: 0000 0002 00000000/dev/input/event4: 0000 0000 00000000/dev/input/event4: 0003 003a 00000041/dev/input/event4: 0003 0035 00000243/dev/input/event4: 0003 0036 000004b5/dev/input/event4: 0003 0039 00000000/dev/input/event4: 0000 0002 00000000/dev/input/event4: 0000 0000 00000000/dev/input/event4: 0003 003a 00000030/dev/input/event4: 0003 0035 0000028c/dev/input/event4: 0003 0036 000004ca/dev/input/event4: 0003 0039 00000000/dev/input/event4: 0000 0002 00000000/dev/input/event4: 0000 0000 00000000/dev/input/event4: 0000 0002 00000000/dev/input/event4: 0001 014a 00000000/dev/input/event4: 0000 0000 00000000
一直打印当前的输入事件。
与get相对应的,肯定是send ,也就是发送指令:
sendevent <节点路径> <类型><代码> <值>
adb shell sendevent /dev/input/event0 1 116 1 #按下电源键adb shell sendevent /dev/input/event0 1 116 0 #抬起电源键
具体效果跟厂商有关,可能不生效。
还有一种输入网上也有相关介绍:
IBinder wmbinder = ServiceManager.getService( "window" ); IWindowManager m_WndManager = IWindowManager.Stub.asInterface( wmbinder)m_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A ),true );// key upm_WndManager.injectKeyEvent( new KeyEvent( KeyEvent.ACTION_UP, KeyEvent.KEYCODE_A ),true );
在实践过程中发现并不可用,IWindowManager 类里面根本就没有injectKeyEvent之类的方法,不知道是不是API版本不同还是什么其他原因。
IWindowManager 源码地址: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/IWindowManager.java#IWindowManager
参考文章:
http://www.pocketmagic.net/injecting-events-programatically-on-android/#.VEoIoIuUcaV
https://wizardforcel.gitbooks.io/deepin-android-vol3/content/5.html
- Android 注入Event
- android EVENT
- android注入
- android event listener and event handler
- Android UI Event Listener
- Android Input Event Dispatching
- android touch event summary
- Android Input Event Dispatching
- Android Input Event Dispatching
- Android UI Event Listener
- Android UI Event Listener
- android Button click event.
- android event 事件来龙去脉
- android event bus
- android input event analyse
- Android Input Event Propagation
- ANDROID Event Handlers
- Android UI Event Listener
- [c++ primer笔记][c++11] auto与decltype
- Navicat如何生成已经存在数据表的sql语句
- linux分区方案
- Android视频直播的实现(包括服务器搭建)
- 网站内页优化也是SEO的重点
- Android 注入Event
- 重装windows系统以及安装双系统和rice vpn问题解决日志
- MySQL索引原理与慢查询优化
- 使用谷歌翻译pdf内容小技巧——快速替换换行
- csdn为什么到现在还没有自动保存功能?
- elaticsearch 基本概念
- pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
- Python-模块
- 常用git命令