注入是事件处理流程如:
1 .View 接受到上报的Touch事件,被分发到相应的View的OnTouch事件中,
2 .我可以通过覆盖这个方法,向InputManager中注入KeyCode事件,如:back,home等
3. .back ,home 等注入事件,然后分别通过Activity.java,和PhoneWindowsManager.java的处理Event实现功能
在3.0中,我可以通过
1 .framework/base/SystemUI/src/com/android/systemui/policy/KeyButtonView.java
可以看到注入事件使用IwindowManager接口中injectInputEventNoWait(KeyEvent event);
这个接口实现在WindowManagerService.java中
2 .然后WindowManagerService中将事件上报给相应的当前系统,被应用或者系统处理
====================================================================
下面是3.0中Home键的处理过程
1 .framework/base/SystemUI/src/com/android/systemui/policy/KeyButtonView.java 中,通过
injectInputEventNoWait ,输入Home键的keyCode(在Manifest中使用这个view中添加Keycode属性)
2 .Home事件在PhoneWindowManager中interceptKeyBeforeDispatching方法中被处理
3 .调用launchHomeFromHotKey();方法回到Launch主页面
===================================================================
android中,有4种注入输入事件的方法分别是:
1.boolean injectKeyEvent(in KeyEvent ev,boolean sync); //注入key事件
2.boolean injectPointerEvent(in MotionEvent ev,boolean sync); //注入mouse事件
3.boolean injectTrackballEvent(in MotionEvent ev,boolean sync); //注入轨迹球事件
4.boolean injectInputEventNoWait(in InputEvent ev); //注入输入事件
这个四个方法都是通过IWindowManager.aidl 方式提供给别的进程调用的。
可利用这个接口实现,windows鼠标,keyboard等事件通过socket传送给android,android的server实现注入事件,进而模拟windows的鼠标的事件,从而达到window鼠标控制android的系统。